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 として返されます ( result2XElement として返されます)。

これは機能しませんか?名前空間の設定が間違っていますか?

4

2 に答える 2

2

null の名前空間とは異なる名前空間のノードを参照する XPath では、常に明示的なプレフィックスを使用する必要があります。

        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

あなたはと混合XmlReaderしていますLinq2xml

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 に答える