0
我有一個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
我們不知道你的VBA代碼,所以我們無法幫幫我。 – reporter 2014-12-19 10:10:21
嗨記者。我剛剛編輯我的帖子並添加了我正在使用的代碼。請記住,正如我所說的,如果沒有XML中的名稱空間,代碼將毫無問題地運行。 – Braulio 2014-12-19 17:08:18
也許嘗試http://stackoverflow.com/questions/16490839/how-to-query-default-namespace-with-msxml – 2014-12-19 17:56:08