在XML文件里面有这么一节 怎么才能读到这一节里面的值呢?
本帖最后由 eaglelin 于 2012-3-15 02:35 编辑在XML文件里面有这么一节怎么才能读到这一节里面的值呢?
我用的是#include <ACN_MSXML.au3>
关键是这一节 里面有个INDEX="1" 其他的节里面 还有INDEX="2"。。。。。。。
我怎么读到里面的值呢 比如<DISPLAYNAME>Windows 7 简易版</DISPLAYNAME>
<IMAGE INDEX="1">
<DIRCOUNT>9612</DIRCOUNT>
<FILECOUNT>48586</FILECOUNT>
<TOTALBYTES>8119970326</TOTALBYTES>
<CREATIONTIME>
<HIGHPART>0x01CB8901</HIGHPART>
<LOWPART>0xEF63352E</LOWPART>
</CREATIONTIME>
<LASTMODIFICATIONTIME>
<HIGHPART>0x01CBF8E7</HIGHPART>
<LOWPART>0x6CD133C5</LOWPART>
</LASTMODIFICATIONTIME>
<WINDOWS>
<ARCH>0</ARCH>
<PRODUCTNAME>Microsoft® Windows® Operating System</PRODUCTNAME>
<EDITIONID>Starter</EDITIONID>
<INSTALLATIONTYPE>Client</INSTALLATIONTYPE>
<HAL>acpiapic</HAL>
<PRODUCTTYPE>WinNT</PRODUCTTYPE>
<PRODUCTSUITE>Terminal Server</PRODUCTSUITE>
<LANGUAGES>
<LANGUAGE>zh-CN</LANGUAGE>
<DEFAULT>zh-CN</DEFAULT>
</LANGUAGES>
<VERSION>
<MAJOR>6</MAJOR>
<MINOR>1</MINOR>
<BUILD>7601</BUILD>
<SPBUILD>17514</SPBUILD>
<SPLEVEL>1</SPLEVEL>
</VERSION>
<SYSTEMROOT>WINDOWS</SYSTEMROOT>
</WINDOWS>
<NAME>Windows 7 STARTER</NAME>
<DESCRIPTION>Windows 7 STARTER</DESCRIPTION>
<FLAGS>Starter</FLAGS>
<HARDLINKBYTES>3016164054</HARDLINKBYTES>
<DISPLAYNAME>Windows 7 简易版</DISPLAYNAME>
<DISPLAYDESCRIPTION>Windows 7 简易版</DISPLAYDESCRIPTION>
</IMAGE>XML文件附上
自己顶!!! 什么意思,没明白 本帖最后由 shqf 于 2012-3-14 20:37 编辑
搞这个文件ACN_MSXML.au3颇费我一番功夫。其实_MSXML.au3也一样可用。不知这二个文件什么关系,但_MSXML.au3文件更新日期相对较晚,用这个似乎比较好,且也容易搞得。地址http://code.google.com/p/my-autoit/downloads/detail?name=_MSXML.au3&can=2&q=,只是里面有错误,需把1024-1032行内容删除才行#include <_MSXML.au3>
;或#include <ACN_MSXML.au3>
#include <array.au3>
Local $oXMLDoc
_MSXML_InitInstance($oXMLDoc)
If @error Then
MsgBox(0,"Error","Failed to create instance")
Exit
EndIf
_MSXML_FileOpen($oXMLDoc, @ScriptDir&"\1.xml")
If @error Then
MsgBox(0,"Error",_MSXML_Error())
Else
$Nodes=_MSXML_GetChildNodes($oXMLDoc, "WIM/IMAGE")
For $i=1 To$Nodes
$text=_MSXML_GetChildText($oXMLDoc,"WIM/IMAGE/"&$Nodes[$i])
_ArrayDisplay($text)
Next
EndIf
$oXMLDoc = 0
楼主试试,是要这样的结果吗? 回复 4# shqf
谢谢你的解释
关键是这一节 里面有个INDEX="1" 其他的节里面 还有INDEX="2"。。。。。。。
我怎么读到里面的值呢 比如<DISPLAYNAME>Windows 7 简易版</DISPLAYNAME> 本帖最后由 shqf 于 2012-3-15 14:03 编辑
得到了你要的值。只是用_MSXML.au3这个文件有报错现象,用ACN_MSXML.au3则没问题啊。
;#include <_MSXML.au3>
#include <ACN_MSXML.au3>
#include <array.au3>
Local $oXMLDoc, $aName, $aValue
_MSXML_InitInstance($oXMLDoc)
If @error Then
MsgBox(0, "Error", "Failed to create instance")
Exit
EndIf
FileCopy(@ScriptDir & "\1.xml", @TempDir & "\1.xml", 1)
_MSXML_FileOpen($oXMLDoc, @TempDir & "\1.xml")
If @error Then
MsgBox(0, "Error", _MSXML_Error())
Else
$Nodes = _MSXML_GetChildNodes($oXMLDoc, "WIM")
Local $index = 0
For $i = 1 To $Nodes
If $Nodes[$i] = "IMAGE" Then
$index = $index + 1
$text = _MSXML_GetChildText($oXMLDoc, "WIM/" & $Nodes[$i] & "/DISPLAYNAME")
MsgBox(0, "index=" & $index, $text)
_MSXML_DeleteNode($oXMLDoc, "WIM/" & $Nodes[$i])
EndIf
Next
EndIf
$oXMLDoc = 0_MSXML.au3没中文帮助文件,搞起来真累。最近在学正则,其实用正则来解决不要太简单啊。 得到了你要的值。只是用_MSXML.au3这个文件有报错现象,用ACN_MSXML.au3则没问题啊。_MSXML.au3没中文帮助文 ...
shqf 发表于 2012-3-15 13:43 http://www.autoitx.com/images/common/back.gif
谢谢!但是这样还是没有取到 index的值 。只是顺序读取节点啊 ? 二段代码能获取元素名称及元素所含的文本内容了。 你还要获取元素的属性值啊!这有点儿难度了。 本帖最后由 shqf 于 2012-3-16 19:42 编辑
今天终于搞懂了_MSXML_GetAttrib()的用法,可以获取元素的属性值了。楼主试试。
;#include <_MSXML.au3>
#include <ACN_MSXML.au3>
#include <array.au3>
Local $oXMLDoc, $aName, $aValue
_MSXML_InitInstance($oXMLDoc)
If @error Then
MsgBox(0, "Error", "Failed to create instance")
Exit
EndIf
FileCopy(@ScriptDir & "\1.xml", @TempDir & "\1.xml", 1)
_MSXML_FileOpen($oXMLDoc, @TempDir & "\1.xml")
If @error Then
MsgBox(0, "Error", _MSXML_Error())
Else
$Nodes = _MSXML_GetChildNodes($oXMLDoc, "WIM")
For $i = 1 To $Nodes
If $Nodes[$i] = "IMAGE" Then
$Value = _MSXML_GetAttrib($oXMLDoc, "WIM/" & $Nodes[$i] , "INDEX") ;获取元素的属性值
$text = _MSXML_GetChildText($oXMLDoc, "WIM/" & $Nodes[$i] & "/DISPLAYNAME")
MsgBox(0, "index=" & $Value, $text)
_MSXML_DeleteNode($oXMLDoc, "WIM/" & $Nodes[$i])
EndIf
Next
EndIf
$oXMLDoc = 0 今天终于搞懂了_MSXML_GetAttrib()的用法,可以获取元素的属性值了。楼主试试。
shqf 发表于 2012-3-16 19:40 http://www.autoitx.com/images/common/back.gif
非常感谢 我修改了一下 更加清晰#include <ACN_MSXML.au3>
#include <array.au3>
Local $oXMLDoc, $aName, $aValue
_MSXML_InitInstance($oXMLDoc)
If @error Then
MsgBox(0, "Error", "Failed to create instance")
Exit
EndIf
FileCopy(@ScriptDir & "\1.xml", @TempDir & "\1.xml", 1)
_MSXML_FileOpen($oXMLDoc, @TempDir & "\1.xml")
If @error Then
MsgBox(0, "Error", _MSXML_Error())
Else
$Nodes = _MSXML_GetChildNodes($oXMLDoc, "WIM")
For $i = 1 To $Nodes
If $Nodes[$i] = "IMAGE" Then
$Value = _MSXML_GetAttrib($oXMLDoc, "WIM/" & $Nodes[$i] , "INDEX")
;获取元素的属性值
If $Value = "4" Then ;取特定Index值里面的属性值
$text = _MSXML_GetChildText($oXMLDoc, "WIM/" & $Nodes[$i] & "/DISPLAYNAME")
MsgBox(0, "index=" & $Value, $text)
EndIf
_MSXML_DeleteNode($oXMLDoc, "WIM/" & $Nodes[$i])
EndIf
Next
EndIf
$oXMLDoc = 0 还是用正则来的方便 使用这个试试,ACN_MSXML.au3
@error Then
MsgBox(0, "Error", _MSXML_Error())
Else
$Nodes = _MSXML_GetChildNodes($oXMLDoc, "WIM")
For $i = 1 To $Nodes
If $Nodes[$i] = "IMAGE" Then
$Value = _MSXML_GetAttrib($oXMLDoc, "WIM/" & $Nodes[$i] , "INDEX")
;获取元素的属性值
If $Value = "4" Then ;取特定Index值里面的属性值
$text = _MSXML_GetChildText($oXMLDoc, "WIM/" & $Nodes[$i] & "/DISPLAYNAME")
MsgBox(0, "index=" & $Value, $text)
EndIf
_MSXML_DeleteNode($oXMLDoc, "WIM/" & $Nodes[$i])
EndIf
Next
EndIf
$oXMLDoc = 0
肯定不出错
页:
[1]