[英]Why can I not use an XPath on XML data with namespace?
我正在使用以下代码:
string testingXML = "<Policy><Activity xmlns=\"http://schemas.microsoft.com/netfx/2009/xaml/activities\"></Activity></Policy>";
var xmlReader = XmlReader.Create( new StringReader(testingXML) );
var myXDocument = XDocument.Load( xmlReader );
var namespaceManager = new XmlNamespaceManager( xmlReader.NameTable );
namespaceManager.AddNamespace("", "http://schemas.microsoft.com/netfx/2009/xaml/activities");
var result = myXDocument.XPathSelectElement(
"/Policy/Activity",
namespaceManager
);
var result2 = myXDocument.XPathSelectElement(
"/Policy",
namespaceManager
);
并试图使用namespaceManager
作为我的理解,这应该有助于解决我的问题。 但是,如果我运行上面的代码, result
变量将返回null( result2
确实作为XElement返回)。
这应该不起作用吗? 我是否错误地设置了命名空间?
您必须始终在XPath中使用显式前缀,引用与null中不同的命名空间中的节点 - 即:
namespaceManager.AddNamespace("msact", "http://schemas.microsoft.com/netfx/2009/xaml/activities");
var result = myXDocument.XPathSelectElement(
"/Policy/msact:Activity",
namespaceManager
);
这是XPath按设计工作的方式 - 它与具体实现无关。
您正在将XmlReader
与Linq2xml
混合使用
在Linq2xml它应该是
XDocument doc=XDocument.Parse(testingXML);
XNamespace ns="http://schemas.microsoft.com/netfx/2009/xaml/activities";
doc.Element(ns+"Activity");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.