2009-03-10 9 views
4

こんにちは、私はXMLと.NETの新種です。私は次のファイルをどのように解析できるのだろうかと思っていました。私は提供するIDに基づいてXmlNodeを取得できるようにしたい。例:私は何とかこれをしたいXML C#素早くノードを見つける方法

<Data> 
<Question id="1"> 
<Answer>ddd</Answer> 
</Question> 
</Data> 

は: "回答:DDD"

XmlDocument myDoc = new XmlDocument(); 
XmlElement myElem = myDoc.GetElementById("1"); 
Response.Write("Answer: "+myElem.ChildNodes[0].InnerXML); 

これは私の出力を与える必要があります。

どのようなヘルプも大いに訴えています。ありがとうございます。

また、私は最初に.NETのXMLコンポーネントをマスターしたいので、LINQを使用しないことをお勧めします。

答えて

2

擬似コード:myDoc.selectSingleNode( "//質問[ID @ =何でも]")(ちょうど私の頭を締めくくり)

1

.NetのXMLコンポーネントはうんざりです。 LINQをXMLに変換してください。すべての考慮事項により、より簡単に作業し、より速く実行できます。

+0

私は.NET 2.0にも制限されています... –

+0

@OliverS:あなたの質問にその制限を加えてください。 – NotMe

+0

彼は彼が望むものを指定したので、彼の質問はうまくいきました。質問の範囲外に何かを示唆する必要はありません。 – Pat

3

はありません、コンパイルとそれをEyeballing:

XmlNodeのノード= myDoc.SelectSingleNode (「データ/質問[@ id = '1']/Answer」); Response.Write( "Answer:" + node.InnerText);

もちろん、変数が必要な場合は、1をパラメータに変更するのが理想的です。

+0

これはうまくコンパイル、私は同じことをしようとしていた。 var node = doc.SelectSingleNode( "/ Data/Question [@ id = '1']/Answer"); Response.Write( "Answer:" + node.InnerText); –

2

LINQ以前は、SelectSingleNodeをXPathクエリで使用していました。上記の例では、XPathは"//Question[@id=1]/Answer"のようなものになります。今は、LINQを使用したいと思います。少なくとも、XmlDocumentオブジェクトで作業する必要がないため、オーバーヘッドが削減されるからです。 XElementを使用し、LINQ to XML拡張メソッドを使用して、目的のノードをクエリすることで、1行または2行のコードですべての処理を実行できます。ここで

も、XMLで動作するようにオブジェクトをインスタンス化する必要はありません、あなたのXMLスニペットを使用してLINQの例1つのライナーです:

string xml = "<Data><Question id=\"1\"><Answer>ddd</Answer></Question></Data>"; 
string answer = XElement.Parse(xml).Descendants("Question"). 
    Where(node => node.Attribute("id").Value == "1"). 
    Descendants("Answer").ElementAt(0).Value; 
0

私はそれらのLINQで離れXMLコンポーネントからあなたを指していると思いますは正しい。あなたは、.NET以外の互換性のためにXPathを学んだり、使用したりすることができます。Linqは必要に応じてこれを行うことができます。 XMLコンポーネントは楽しいものではありません。

関連する問題