【发布时间】:2012-05-16 09:33:25
【问题描述】:
我必须通过 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 来处理元素?
问候
詹斯
【问题讨论】:
-
找到了 :) 我必须引用 XPath 的每个“步骤”: ORDER_ID = doc.SelectSingleNode("//openTrans:ORDER_INFO/openTrans:ORDER_ID", nsmgr).InnerText;分别VIND_ORDER_ID = COR.SelectSingleNode("//openTrans:CUSTOMER_ORDER_REFERENCE/openTrans:ORDER_ID", nsmgr).InnerText
-
您应该在常见问题解答允许的情况下发表您的评论作为答案。
标签: c# xml namespaces