如何从XDocument获取NameTable?
它似乎没有XmlDocument具有的NameTable属性.
编辑:从缺乏答案来判断,我猜我可能会忽略这一点.
我正在对像这样的XDocument进行XPath查询...
document.XPathSelectElements("//xx:Name", namespaceManager);
Run Code Online (Sandbox Code Playgroud)
它工作正常,但我必须手动将我想要使用的命名空间添加到XmlNamespaceManager,而不是像使用XmlDocument一样从XDocument中检索现有的命名表.
我的意见
<A xmlns="http://abc.com">
<B>"b"</B>
<C>"c"</C>
</A>
Run Code Online (Sandbox Code Playgroud)
我的守则
XNamespace ns = XNamespace.Get("http://abc.com");
var query= from node in doc.Descendants(ns+ "A")
select new
(
B = (string)node.Element(ns+"B"),
C = (string)node.Element(ns+ "C")
);
Run Code Online (Sandbox Code Playgroud)
我的问题
我ns每次都要添加node.Element()吗?或者还有其他方法吗?
更新
我想要一个表达式(XPath,或类似的Regex表达式),它可以将XML元素与特定的命名空间相匹配.例如,我想找到link元素的值(例如,我需要http://url within <b:link>http://url</b:link>)如下所示.但是,命名空间前缀根据不同的xml文件而有所不同,如案例1-3所示.
考虑到名称空间前缀允许的字符(例如,任何字符允许/有效),任何人都可以提供解决方案(XPath,正则表达式或类似的?
请注意,因为xml文件未知,所以命名空间和前缀在运行时之前是未知的.这是否意味着我不能使用这个XDocument/XmlDocument,因为它需要在代码中知道命名空间.
更新
情况1
<A xmlns:b="link">
<b:link>http://url
</b:link>
</A>
Run Code Online (Sandbox Code Playgroud)
案例2
<A xmlns="link">
<link>http://url
</link>
</A>
Run Code Online (Sandbox Code Playgroud)
案例3
<A xmlns:a123="link">
<a123:link>http://url
</a123:link>
</A>
Run Code Online (Sandbox Code Playgroud)
请注意,link元素中的url可以是任何http url,并且在运行时之前是未知的.
更新
请标记我的问题.