0

我正在使用以下代码:

            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 的形式返回)。

这不应该工作吗?我是否错误地设置了命名空间?

4

2 回答 2

2

您必须始终在 XPaths 中使用显式前缀来引用与 null 不同的命名空间中的节点 - 即:

        namespaceManager.AddNamespace("msact", "http://schemas.microsoft.com/netfx/2009/xaml/activities");

        var result = myXDocument.XPathSelectElement(
            "/Policy/msact:Activity",
            namespaceManager
        );

这是 XPath 设计的工作方式——它与具体的实现无关。

于 2013-02-20T19:21:07.397 回答
0

你正在XmlReaderLinq2xml

在 Linq2xml 中应该是

XDocument doc=XDocument.Parse(testingXML);
XNamespace ns="http://schemas.microsoft.com/netfx/2009/xaml/activities";
doc.Element(ns+"Activity");
于 2013-02-20T19:21:50.887 回答