如何忽略一个XML命名空间

我有一个XML文件,这个XML文件已经声明了命名空间

<CrystalReport xmlns="urn:crystal-reports:schemas:report-detail" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:crystal-reports:schemas:report-detail http://www.businessobjects.com/products/xml/CR2008Schema.xsd"> 

这在Excel中的VBA代码中导致问题。 当我删除这行上面的命名空间,它工作正常。

我的问题是:如何忽略这个命名空间,而不必打开XML文件,手动删除?

我正在使用的代码:

 Public xmlDOM As MSXML2.DOMDocument60 Public Sub setXML(xmlFileName As String) 'Set xmlDOM = CreateObject("MSXML2.DOMDocument") Set xmlDOM = New MSXML2.DOMDocument60 xmlDOM.async = False xmlDOM.Load xmlFileName End Sub Public Function getNode(p_strNode As Variant) As Variant Dim objNodes As IXMLDOMNodeList Dim objNode As IXMLDOMNode Dim storage As Variant Dim X As Integer Set objNodes = xmlDOM.SelectNodes(p_strNode) Set getNode = objNodes End Function Public Sub SB_StartLoadClarityReport() Dim d_path As String Dim d_node As Variant Dim d_arrayFields As Variant d_path = F_GetPathXML() '@Temp d_path = Cells(1, 1).Value 'Open XML File setXML (d_path) 'Get the project fields Set d_node = getNode("CrystalReport/Details/Section") d_arrayFields = F_GetProjectFields(d_node) End Sub Private Function F_GetProjectFields(p_strNode As Variant) 'Get the project fields 'Ex: <Field Name="PROJECTNAME1" - Get PROJECTNAME1 Dim d_arrayFields As Variant Dim p_item As IXMLDOMElement Dim d_count As Integer d_count = 1 For Each p_item In p_strNode.Item(0).ChildNodes If d_count = 1 Then ReDim d_arrayFields(1 To d_count) Else ReDim Preserve d_arrayFields(1 To d_count) End If d_arrayFields(d_count) = p_item.Attributes.Item(0).Text d_count = d_count + 1 Next p_item F_GetProjectFields = d_arrayFields End Function 

这对我来说(经过一些头刮)

 Sub Tester() Const XML As String = "<?xml version='1.0'?>" & _ "<CrystalReport xmlns='urn:crystal-reports:schemas:report-detail' " & _ " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' " & _ " xsi:schemaLocation='urn:crystal-reports:schemas:report-detail " & _ " http://www.businessobjects.com/products/xml/CR2008Schema.xsd'>" & _ " <Test>Testing</Test>" & _ "</CrystalReport>" Dim xmlDom As New MSXML2.DOMDocument60 Dim nodeList As MSXML2.IXMLDOMNodeList Dim iNode As MSXML2.IXMLDOMNode With xmlDom .async = False .validateOnParse = True .LoadXML XML .setProperty "SelectionLanguage", "XPath" 'set the default namespace and give it a prefix (eg) "xx" .setProperty "SelectionNamespaces", _ "xmlns:xx='urn:crystal-reports:schemas:report-detail'" 'use the same default prefix in your XPath Set nodeList = .SelectNodes("//xx:Test") End With Debug.Print nodeList.Length For Each iNode In nodeList Debug.Print iNode.XML Next iNode End Sub