0

我必须通过 C# 将 XML 文档导入 SQL-DB。XML 有几个名称空间。

我试图解决我希望通过 XPath 导入的特定元素,但由于命名空间而中断。代替

XmlDocument doc = new XmlDocument();
doc = XDocument.Load(Filename);
GENERATOR_INFO = doc.SelectSingleNode("ORDER/ORDER_HEADER/ORDER_INFO/GENERATOR_INFO").InnerText;

我写这样的东西:

XmlDocument doc = new XmlDocument();
doc = XDocument.Load(Filename);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("openTrans", "http://www.opentrans.org/XMLSchema/2.1");
GENERATOR_INFO = doc.SelectSingleNode("//openTrans:GENERATOR_INFO", nsmgr).InnerText;

从而缩短了我需要值的元素的“路径”。

我的问题是:我怎样才能直接解决一个元素?在 XMl 中有两个称为“ORDER_ID”的元素:

ORDER/ORDER_HEADER/ORDER_INFO/ORDER_ID

ORDER/ORDER_HEADER/CUSTOMER_ORDER_REFERENCE/ORDER_INFO

当使用上面的语法时,我只得到一个元素,使用循环/Linq 我得到两个值,但不知道哪个是哪个。尽管有命名空间,是否有一个选项可以通过唯一的 XPath 来处理元素?

问候

延斯

4

1 回答 1

0

找到了 :) 我必须引用 XPath 的每个“步骤”: ORDER_ID = doc.SelectSingleNode("//openTrans:ORDER_INFO/openTrans:ORDER‌​_ID", nsmgr).InnerText; 分别 VIND_ORDER_ID = COR.SelectSingleNode("//openTrans:CUSTOMER_ORDER_REFERENCE/o‌​penTrans:ORDER_ID", nsmgr).InnerText

于 2016-08-31T14:09:58.237 回答