问题- 我有一个加载 XML 文件的 Windows 应用程序,并且其他输入采用 XPath 从给定的 XML 获取用户想要的数据(显然这不是问题)。我用来从给定 XPath 加载元素的代码片段就像 -
XPathDocument docNav;
XPathNavigator nav;
XPathNodeIterator NodeIter;
XmlNamespaceManager manager;
docNav = new XPathDocument(fileName);
nav = docNav.CreateNavigator();
nav.MoveToFollowing(XPathNodeType.Element);
IDictionary<string, string> names = nav.GetNamespacesInScope(XmlNamespaceScope.All);
manager = new XmlNamespaceManager(nav.NameTable);
foreach (KeyValuePair<string, string> item in names)
{
manager.AddNamespace(item.Key, item.Value);
}
NodeIter = nav.Select(path, manager);
我有一个示例 XML,如下所示 -
<FpML xmlns:ns="http://www.fpml.org/2005/FpML-4-2">
<header>
<messageId>ts4-XYZ</messageId>
<sentBy>XYZ</sentBy>
<creationTimestamp>2017-07-08T08:05:53.929Z</creationTimestamp>
</header>
<trade>
<tradeHeader>
<partyTradeIdentifier>
<partyReference href="OUR_PARTY"/>
<tradeId tradeIdScheme="uniqueId">AAAAAA</tradeId>
</partyTradeIdentifier>
<partyTradeInformation>
<partyReference href="OUR_PARTY"/>
<trader>dummy trader name</trader>
</partyTradeInformation>
<tradeDate>2017-07-08</tradeDate>
<tsfpml:completedDateTime>2017-07-08T08:05:53.656Z</tsfpml:completedDateTime>
</tradeHeader>
</trade>
</FpML>
现在,我想检索 'trader' 元素值。如果我使用 XPath 查询作为
//*[local-name()="trader" and namespace-uri()='http://www.fpml.org/2005/FpML-4-2']
但是如果我给它,它就无法加载任何元素/FpML/trade/tradeHeader/partyTradeInformation/trader
为了选择具有默认命名空间的节点,我的 XPath 助手应用程序需要进行哪些更改。
先感谢您!