2

私は単純な xml を持っています。そこから XmlDocument を作成し、Xpath を使用してノードをフェッチしました。このノードをコードの他の部分に渡す必要があります。そこでは、XmlNode オブジェクトでさらに xpath 関数を使用して他のサブノードを取得できます。しかし、以下のコードでは

string xmlString = "<catalog><music><cds><cd><title>First Title</title><author>Author    1</author></cd><cd><title>Second Title</title><author>Author 2</author></cd></cds></music></catalog>";
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xmlString);
XmlNode musicNode = xmlDocument.SelectSingleNode("/catalog/music");
XmlNode cdsNode = musicNode.SelectSingleNode("/cds");

musicNode の名前を出力すると、「music」が表示されるので、「music」ノードがあると想定します。そのため、「cds」XmlNode を取得すると仮定して、音楽ノードに xpath 式「/cds」を再度適用しましたが、コード内の cdsNode は未定義の値を返しますが、そうすると

XmlNode cdsNode = musicNode.SelectSingleNode("/catalog/music");

「音楽」ノードである cdsNode の有効な値を再び取得しています。musicNode は「音楽」XmlNode ではなく XmlDocument を表していると思いますか??? 私は何か不足していますか?

4

1 に答える 1

2

XmlDocument/ は、現在のノードに関係なく、常に基になる のルートに戻ります。

をドロップし/て相対パスをナビゲートすると、うまくいくはずです。

XmlNode musicNode = xmlDocument.SelectSingleNode("/catalog/music");
XmlNode cdsNode = musicNode.SelectSingleNode("cds");

または、もう一度道全体を歩きます

XmlNode cdsNode = xmlDocument.SelectSingleNode("/catalog/music/cds");
于 2012-09-11T13:39:12.180 に答える