8

次の.NETC#Windowsサービスによって読み取られている有効なXMLファイルがあります。問題のタグ(u1_000)は絶対に要素に含まれています:

<book id="u1_000" category="xyz"> 

GetElementById()がタグ付きのBook要素を見つけられない理由はありますか?- ありがとう

XmlDocument doc = new XmlDocument();
doc.Load("C:\\j.xml");
XmlElement ee = doc.GetElementById("U1_000");

<book id="U1_000" category="web"> 
4

3 に答える 3

6

他に何もない場合は、おそらくxpathをバックアップとして使用します。

string id = "u1_000";
string query = string.Format("//*[@id='{0}']", id); // or "//book[@id='{0}']"
XmlElement el = (XmlElement)doc.SelectSingleNode(query);
于 2010-01-05T05:31:10.553 に答える
4

要素のどの属性が一意のIDを構成するかを確立するには、DTDが必要です。idXMLでは、属性が一意の要素IDとして扱われるべきであると自動的に想定されることはありません。

一般に、「unDTDed」XMLでは、getElementByIdはあまり役に立ちません。ほとんどの場合、処理されるXMLファイルの構造が理解されているため(たとえば、books一連のbook要素を含むルート要素が呼び出されます)、通常のアクセスは次のようになります。

 XmlElement book = (XmlElement)doc.DocumentElement.SelectSingleNode("book[@ID='U1_000']");

XML構造や要素のタグ名が本当にわからない場合は、Marcsの回答で説明されているブルートフォース検索が機能します。

于 2010-01-05T09:16:26.417 に答える
3

この方法については、MSDNのドキュメントを確認してください。以下のサンプルでは、​​DOCTYPEを使用してIDが何であるかを確立する方法を確認できます。これで問題が解決する場合があります。

于 2010-01-05T00:20:02.493 に答える