6

次のような構造を含むXMLドキュメントを使用しています。

<MT>
  <Events>
    <event id="1">
      <field name="blah" value="a_value" type="atype" />
      .
      .
      .
     </event>
   </Events>
 </MT>

私は現在、これをファイルからXMLドキュメントに次のようにロードしています。

XmlDocument xdoc = new XmlDocument();
xdoc.Load("somefile.xml");  //Successfully loads btw

ただし、次のコード行を実行しようとすると、問題が発生し、この1つの特定のドキュメントでのみ問題が発生します。

xdoc.SelectSingleNode("//event[@id='1']"); //This returns a null 

'id'という名前の属性の使用に問題があるため、これがnullを返していると推測して、正しい方向に進んでいますか、それともコードに何かが欠けていますか?

4

1 に答える 1

10

XML ファイルを使用してこれを複製することはできません

<MT>
  <Events>
    <event id="1">
      <field name="blah" value="a_value" type="atype" />
     </event>
   </Events>
</MT>

そしてコード

XmlDocument doc = new XmlDocument();
doc.Load(@"C:\test.xml");

XmlNode node = doc.SelectSingleNode("//event[@id='1']");

これにより、予想どおりnull以外のノードが返されます。

アップデート

xmlns="example.org"要素に aを追加した後<MT>、XPath の名前空間マネージャーを構成し、その名前空間をイベントに使用する必要がありました。何らかの理由で、デフォルトの名前空間を機能させることができませんでした。

XmlDocument doc = new XmlDocument();
doc.Load(@"D:\test.xml");

XmlNamespaceManager manager = new XmlNamespaceManager(doc.NameTable);
manager.AddNamespace("e", "http://example.org");

XmlNode node = doc.SelectSingleNode("//e:event[@id='1']", manager);

これを機能させようとしたときに、1つのことが私を混乱させました。含まれている名前空間を見つけるためではないのに、XmlNamespaceManager がドキュメントから XmlNameTable を必要とするのはなぜですか? 同様に、なぜ NameTable名前空間を定義する必要があるのでしょうか? どなたか詳しい方、コメントいただけると助かります。

于 2009-04-30T23:10:10.310 に答える