2

私はこのXMLファイルを持っています:

 <material>
   <item>
      <name>theName1</name>
      <val1>1.1</val1>
      <val2>2.5</val2>
      <val3>5.2</val3>
   </item>
   <item>
      <name>theName2</name>
      <val1>2.1</val1>
      <val2>3.5</val2>
      <val3>6.2</val3>
   </item>
 </material>

わかりました、今私は 1 つのことを持っています: アイテム > 名前ノード (例: theName2) の 1 つの値は、これを知っているので、その兄弟 (val1、val2...) を選択する必要があります。

これをどうやって進めるかについてのアイデアはありますか?

4

4 に答える 4

4

xmlをXmlDocumentにロードした後、次の手順を実行します。

document.SelectSingleNode("/material/item[val1='2']/name").InnerText

これはあなたが必要なものですか..?

于 2012-12-01T21:59:47.597 に答える
1
XDocument xdoc = XDocument.Load("file.xml");
IEnumerable<double> values =
    xdoc.Descendants("item")
        .Where(i => (string)i.Element("name") == "theName2") // select item
        .Select(i => i.Element("name")) // select name node 
        .SelectMany(e => e.ElementsAfterSelf()) // take siblings
        .Select(v => (double)v); // convert all value nodes to double
于 2012-12-01T22:15:41.083 に答える
1

少しXPath+Linqが役立つかもしれません

var xDoc = XDocument.Parse(xml); //OR XDocument.Load(filename);
string xpath = String.Format("//item[name[text()='{0}']]","theName2");

var dict = xDoc.XPathSelectElement(xpath).Descendants()
            .Where(d=>d.Name.LocalName!="name")
            .ToDictionary(x=>x.Name.LocalName,x=>(decimal)x);
于 2012-12-01T22:01:52.187 に答える
0
    var doc = XDocument.Parse(Xml); //create XDocument from string
    var items = doc.Descendants("item"); //select all 'item' elements
    foreach (var item in items)
    {
        var childs = item.Elements().Skip(1); //skip <name> element
        foreach (var child in childs)
            Console.WriteLine(child); // val1, val2, val3, etc
    }

すべての「名前」要素を選択するには:

    var names = doc.Descendants("name");
    foreach (var name in names)
        Console.WriteLine(name);
于 2012-12-01T22:03:39.937 に答える