たとえば、XmlDocumentから選択する場合。 XPathメソッドSelectSingleNode最初に一致するノードからなるXmlNodeを取得します。<ノード1 >を呼び出します。 <node1>をさらに選択すると、XPath-rootがこのノードであることが予想されますが、これは正しくありません。ルートは元のXmlDocumentと同じままです。ここでは例です:XmlDocumentのXPathルートを.net(C#)に変更しますか?
XmlDocument xd = new XmlDocument();
xd.LoadXml(@"<root>
<subroot>
<elm>test1</elm>
<elm>test2</elm>
<elm>test3</elm>
</subroot>
</root>");
XmlNode xnSubRoot = xd.SelectSingleNode("/root/subroot");
//This is the XPath I want to be able to use, but it returns null.
XmlNode xnElm = xnSubRoot.SelectSingleNode("/subroot/elm");
//This works, but the XPath-root is the same as in the original document.
xnElm = xnSubRoot.SelectSingleNode("/root/subroot/elm");
は、私は私が欲しいのXPathを使用できるようにxnSubRootのルートを「修正」する方法はありますか?私の質問の理由は、OuterXmlプロパティが「/ Data/SubElement/...」の構造を示すXmlNodeを返すWebサービスを呼び出すケースがあるためですが、XPathを実行すると "/Data "の場合、nullが返され、"/SubElement "のみが動作します。つまり、XPathルートは実際のドキュメントルートより1レベル低いようです。
これについては完全に合理的な説明があること、または私は何かが欠けていると確信しています。しかし、私はhttp://msdn.microsoft.com/en-us/library/d271ytdx(VS.80).aspxを読んでも、本当に何かを見つけることができないようです。
N.B.私はXPath "// subroot/elm"を使用することが可能であることを認識していますが、XML構造内で他の要素をさらに下に置くこともあります。
は、おかげで、それは私が与えた例に来るとき、あなたは当然の権利です。しかし、XPath-rootが実際にドキュメントルートよりも低いのはどうでしょうか?どのようにすることができるかはわかりませんが、Webサービスから受け取ったXMLNodeの場合はそうです。 –
WebサービスXMLのサンプルを提供できますか? –
VS2005で「Web参照の追加」機能を使用して、Webサービスを呼び出すためのコードを自動生成しました。このコードは、object []を返すSystem.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(string、object [])を呼び出し、オブジェクト[0]をXmlNodeに明示的に型キャストします。 XMLに関しては申し訳ありませんがここには表示できませんが、文書構造は<! - その他の要素 - > です。しかし、予想される/ Data(すなわちSelectSingleNode( "/ Data")はnullを返しますが、SelectSingleNode( "/ SubElement")は機能します)ではなく、ルートが/ SubElementであるXPathを実行しています。 –