我有一个如下所示的XML文件:
<xc:XmlCache xmlns:xc="XmlCache" xmlns:mp="mx.MarketParameters" xmlns:rt="mx.MarketParameters.Rates" xmlns:rtcu="mx.MarketParameters.Rates.Curve">
<xc:XmlCacheArea xc:value="MarketParameters">
<mp:nickName xc:value="MDS" xmlns:mp="mx.MarketParameters">
<mp:date xc:value="20160518">
<rt:rate xmlns:rt="mx.MarketParameters.Rates">
<rtcu:curve xmlns:rtcu="mx.MarketParameters.Rates.Curve">
<rtcu:currency xc:value="AED">
<rtcu:label xc:value="AED FX">
<rtcu:type xc:value="Swap point">
<rtcu:generator xc:value="USD/AED">
<rtcu:market xc:value="">
<rtcu:maturity xc:value="10M" xc:dates="20160523-20170323" xc:type="Fields">
我想在VBA中获取类型rtcu:maturity
的节点列表以执行某些操作:
Dim xmlCurvesFileDOMDocument As New DOMDocument60
Dim listOfMaturities As IXMLDOMNodeList
xmlCurvesFileDOMDocument.Load (xmlCurvesFilePath)
Set listOfMaturities = xmlCurvesFileDOMDocument.SelectNodes("//xc:XmlCache/xc:XmlCacheArea/mp:nickName/mp:date/rt:rate/rtcu:curve/rtcu:currency/rtcu:label/rtcu:type/rtcu:generator/rtcu:market/rtcu:maturity")
(注意:我省略了xmlCurvesFilePath
,但它是正确的,文件已加载)。
当我运行它时,在listOfMaturities
的集合上,我收到Reference to undeclared namespace prefix: 'xc'
类型的错误。如果我从路径中删除xc
,它会告诉我问题是另一个问题(mp
)。如果我从XPath中删除所有命名空间,它可以工作,但它什么都不加载。
我试图搜索堆栈溢出,似乎解决方案是设置选择名称空间(如here和here)。
然而,当我尝试这样做时:
xmlCurvesFileDOMDocument.setProperty("SelectionNamespaces", "xmlns:xc='XmlCache'")
...我收到编译错误,告诉我“Expected : =
”。
有没有人知道我如何声明我的命名空间并解析这个XML文件?
答案 0 :(得分:1)
加载包含名称空间的XML文件
您在加载前没有设置命名空间,请尝试此代码,包括加载错误例程:
contours = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img, contours, -1, (0, 255, 0), 3)
答案 1 :(得分:0)
使用Xml Linq
Imports System.Xml
Imports System.Xml.Linq
Module Module1
Const FILENAME As String = "c:\temp\test.xml"
Sub Main()
Dim doc As XDocument = XDocument.Load(FILENAME)
Dim namespaces = doc.Descendants().Select(Function(x) New With {.ns = IIf(x.ToString().Contains(":"), x.ToString().Substring(1, x.ToString().IndexOf(":")), String.Empty), .name = x.Name.LocalName}).ToArray()
End Sub
End Module
答案 2 :(得分:0)
最后,错误只是语法。 而不是:
xmlCurvesFileDOMDocument.setProperty("SelectionNamespaces", "xmlns:xc='XmlCache'")
...我不得不用括号编写它,声明所有命名空间:
xmlCurvesFileDOMDocument.setProperty "SelectionNamespaces", "xmlns:xc='XmlCache' xmlns:mp='mx.MarketParameters'" etc.