找回密码
 加入
搜索
查看: 5182|回复: 11

[系统综合] 在XML文件里面有这么一节 怎么才能读到这一节里面的值呢?

  [复制链接]
发表于 2012-3-12 17:53:20 | 显示全部楼层 |阅读模式
本帖最后由 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文件附上

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2012-3-14 16:12:25 | 显示全部楼层
自己顶!!!
发表于 2012-3-14 18:56:23 | 显示全部楼层
什么意思,没明白
发表于 2012-3-14 20:20:58 | 显示全部楼层
本帖最后由 shqf 于 2012-3-14 20:37 编辑

搞这个文件ACN_MSXML.au3颇费我一番功夫。其实_MSXML.au3也一样可用。不知这二个文件什么关系,但_MSXML.au3文件更新日期相对较晚,用这个似乎比较好,且也容易搞得。地址http://code.google.com/p/my-auto ... u3&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[0]
        $text=_MSXML_GetChildText($oXMLDoc,"WIM/IMAGE/"&$Nodes[$i])
   _ArrayDisplay($text)   
   Next 
EndIf
$oXMLDoc = 0
楼主试试,是要这样的结果吗?
 楼主| 发表于 2012-3-15 02:34:34 | 显示全部楼层
回复 4# shqf


谢谢你的解释
关键是这一节 里面有个INDEX="1" 其他的节里面 还有INDEX="2"。。。。。。。
我怎么读到里面的值呢 比如<DISPLAYNAME>Windows 7 简易版</DISPLAYNAME>
发表于 2012-3-15 13:43:49 | 显示全部楼层
本帖最后由 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[0]
                If $Nodes[$i] = "IMAGE" Then
                        $index = $index + 1
                        $text = _MSXML_GetChildText($oXMLDoc, "WIM/" & $Nodes[$i] & "/DISPLAYNAME")
                        MsgBox(0, "index=" & $index, $text[1])
                        _MSXML_DeleteNode($oXMLDoc, "WIM/" & $Nodes[$i])
                EndIf
        Next
EndIf
$oXMLDoc = 0
_MSXML.au3没中文帮助文件,搞起来真累。最近在学正则,其实用正则来解决不要太简单啊。
 楼主| 发表于 2012-3-16 11:29:08 | 显示全部楼层
得到了你要的值。只是用_MSXML.au3这个文件有报错现象,用ACN_MSXML.au3则没问题啊。_MSXML.au3没中文帮助文 ...
shqf 发表于 2012-3-15 13:43



    谢谢!  但是这样还是没有取到 index的值 。只是顺序读取节点啊 ?
发表于 2012-3-16 19:18:15 | 显示全部楼层
二段代码能获取元素名称及元素所含的文本内容了。 你还要获取元素的属性值啊!这有点儿难度了。
发表于 2012-3-16 19:40:55 | 显示全部楼层
本帖最后由 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[0]
                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[1])
                        _MSXML_DeleteNode($oXMLDoc, "WIM/" & $Nodes[$i])
                EndIf
        Next
EndIf
$oXMLDoc = 0

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

 楼主| 发表于 2012-3-17 05:54:17 | 显示全部楼层
今天终于搞懂了_MSXML_GetAttrib()的用法,可以获取元素的属性值了。楼主试试。
shqf 发表于 2012-3-16 19:40


非常感谢 我修改了一下 更加清晰
#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[0]
                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[1])
                                                EndIf
                        _MSXML_DeleteNode($oXMLDoc, "WIM/" & $Nodes[$i])
                EndIf
        Next
EndIf
$oXMLDoc = 0
发表于 2012-3-17 08:42:26 | 显示全部楼层
还是用正则来的方便
发表于 2012-3-24 06:06:18 | 显示全部楼层
使用这个试试,ACN_MSXML.au3
@error Then

        MsgBox(0, "Error", _MSXML_Error())

Else

        $Nodes = _MSXML_GetChildNodes($oXMLDoc, "WIM")  

        For $i = 1 To $Nodes[0]

                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[1])

                                                EndIf

                        _MSXML_DeleteNode($oXMLDoc, "WIM/" & $Nodes[$i])

                EndIf

        Next

EndIf

$oXMLDoc = 0
肯定不出错
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-30 17:34 , Processed in 0.098704 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表