lby0711 发表于 2013-11-15 12:31:10

如何读取xml中带命名空间的节点元素

使用下面的代码,如果xml文档中不包含命名空间的话,没有问题,可以取得正确的内容。#include <Array.au3>
#include <ACN_MSXML.au3>

Dim $oXMLDoc, $strXPath, $sPath, $Element, $n = 0

_MSXML_InitInstance($oXMLDoc)
If @error Then
      MsgBox(0, "Error", "Failed to create instance")
      Exit
EndIf
_MSXML_FileOpen($oXMLDoc, @ScriptDir & "\test2.xml")
If @error Then
      MsgBox(0, "Error", _MSXML_Error())
Else
      $Element = "/"
      While 1
                $n = $n + 1
                If $n - 1 > UBound($Element) - 1 Then ExitLoop
                Node($Element[$n - 1])
      WEnd
EndIf
_ArrayDisplay($Element, '所有元素路径')
$oXMLDoc = 0
Exit

Func Node($strXPath)
      $Nodes = _MSXML_GetChildNodes($oXMLDoc, $strXPath)
      If @error = 1 Then
      ElseIf $Nodes = 0 Then
                $text = _MSXML_GetChildText($oXMLDoc, $strXPath)
                MsgBox(0, "元素", "元素路径:" & $strXPath & @CRLF & "元素文本内容:" & $text)
      Else
                For $i = 1 To $Nodes
                        $nNodes = _MSXML_GetNodeCount($oXMLDoc, $strXPath & "/" & $Nodes[$i])
                        For $m = 1 To $nNodes
                              If $strXPath = "/" Then
                                        $sPath = $Nodes[$i]
                              Else
                                        $sPath = StringReplace($strXPath & "/" & $Nodes[$i] & "[" & $m & "]", "", "")
                              EndIf
                              _ArraySearch($Element, $sPath)
                              If @error Then _ArrayAdd($Element, $sPath)
                        Next
                Next
      EndIf
EndFunc   ;==>Node但是当xml文档中含有命名空间时,上面的代码就不能正确取得所需的值。
xml文档内容如下:<m:list xmlns:m="http://www.xxx.com/xml">
      <l title="音乐">
                <m type="" src="test.mp3">mp3音频</m>
      </l>
      <l title="视频">
                <m type="" src="test.rmvb">rmvb视频</m>
      </l>
</m:list>请教各位,如何能取得上面的节点元素呢。要处理的文档中,命名空间有好几个,有什么好的办法吗?谢谢。
页: [1]
查看完整版本: 如何读取xml中带命名空间的节点元素