2017-11-22 8 views
0

私はxmlの子ノードを取得しようとしています。親ノードに "id"という名前の属性があります。ここにXMLコンテンツがあります:自己IDを使って子ノードを取得

<?xml version="1.0"?> 
<languages> 
    <item id="button_back"> 
     <turkish>geri</turkish> 
     <english>back</english> 
    </item> 
    <item id="button_install"> 
     <turkish>seçilileri kur</turkish> 
     <english>install selected</english> 
    </item> 
</languages> 

私はトルコ語のタグの価値を得たいと思います。これどうやってするの?ここに私が試したものです:

using (XmlReader xr = XmlReader.Create(@"languages.xml")) 
{ 
    XDocument xdoc = XDocument.Load(xr); 
    var query = from t in xdoc.Descendants("item") 
       where t.Element("id").Value.ToLower() == "button_back" // Edit 
       select new 
       { 
        ID = t.Attribute("id").Value, 
        Turkish = t.Element("turkish").Value 
       }; 

    foreach (var it in query) 
    { 
     MessageBox.Show(it.Turkish); 
    } 

} 

EDIT:このコードは私にメッセージボックスと XR ラインのnull参照の例外を与えています。

答えて

0

Element("id")がnullではないと仮定しているため、NullReferenceExceptionが表示されています。あなたはid要素がないので、それはそうです。 Attribute("id")を使用する必要があります。

+0

うわーで、この使用してXML LINQをやって好きです。どうもありがとう。 –

+0

ようこそ。 –

+0

@OnurCan答えをアップアップすると、「ありがとう」という言葉を表現する具体的な方法の1つです。だから、これは最初に「やってくれてありがとう」と言います。もちろん、あなたはSOの投票システムについて知らないかもしれないので、今それを知るべきです。 –

0

私は問題を解決した辞書

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XDocument doc = XDocument.Load(FILENAME); 

      Dictionary<string, string> dict = doc.Descendants("item") 
       .GroupBy(x => (string)x.Attribute("id"), y => (string)y.Element("turkish")) 
       .ToDictionary(x => x.Key, y => y.FirstOrDefault()); 
     } 
    } 
} 
+0

あなたの返信に感謝します。 XDocumentは新しいバージョンでは使用されないという警告が表示されたので、XDocumentを使用したくありません。 –

+0

@OnurCan本当ですか?実際にはコード内でXDocumentを使用していました。それについての警告をどこで見つけましたか? 'XDocument'は、いわゆるLINQ-To-XMLを構築する1つの部分です。もしそれがなくなれば、LINQ-To-XMLもなくなるでしょう。 linq-to-xmlが本当に役立つので、それは信じられません。 –

+0

XDocumentはXmlDocumentの新しいバージョンですが、両方とも数百万のアプリケーションで使用されています。 – jdweng

関連する問題