0

次のような XmlDocument があるとします。

<xmlFile>
  <details>
    <code1>ADJ</code1>
    <code2>ADC </code2>
    <Shipment>
      <foo></foo>
      <bar></bar>
    </Shipment>
    <Shipment>
      <foo></foo>
      <bar></bar>
    </Shipment>
  </details>
  <details>
    <code1>ADJ</code1>
    <code2>SCC </code2>
    <Shipment>
      <foo></foo>
      <bar></bar>
    </Shipment>
  </details>
</xmlFile>

それぞれをxmlファイルで処理する必要がありますが、値が「ADC」の子ノードを持つタグに該当する出荷のみです。これまでのところ、私は持っています:

// Assume there is an XmlDocument named xml 
XmlNodeList details= xml.GetElementsByTagName("details");

foreach (XmlNode node in details)
{
   if (node["code2"].InnerText == "ADC ")
   {
   // Get each shipment and process it accordingly.
   }
}

次に何をすべきかわかりません。ありがとう。

4

4 に答える 4

0

このライブラリにXPath解析を追加しているところです:https ://github.com/ChuckSavage/XmlLib/

私はあなたがこれを行うことができるようにそれを変更しました:

XElement root = XElement.Load(file);
var shipments = root.XPath("details[starts-with(*,'ADC')]/Shipment");

次のようなロングハンド:

var shipments = root.Elements("details")
                    .Where(x => x.Elements().Any(xx => ((string)xx).StartsWith("ADC")))
                    .Elements("Shipment");
于 2012-05-14T20:43:53.157 に答える
0

XPath は、一致の検索を簡素化できます。

foreach (XmlNode node in xml.SelectNodes("/xmlFile/details[normalize-space(code2)='ADC']"))
{
    string foo = node.SelectSingleNode("foo").InnerText;
    string bar = node.SelectSingleNode("bar").InnerText;
}
于 2012-05-14T16:04:55.470 に答える
0

これはあなたが求めているものです

        XmlNodeList details = xml.GetElementsByTagName("details");

        foreach (XmlNode node in details)
        {
            if (node["code2"].InnerText.Trim() == "ADC")
            {
                // Get each shipment and process it accordingly.
                foreach(XmlNode shipment in node.SelectNodes("Shipment"))
                {
                    var foo = shipment.SelectSingleNode("foo");
                    var bar = shipment.SelectSingleNode("bar");
                }
            }
        }
于 2012-05-14T15:49:59.470 に答える
0

質問に記載されているように Data\Sample.xml に xml が含まれていると仮定すると、
以下は XLINQ クエリです。

    XElement root = XElement.Parse(File.ReadAllText(@"Data\Sample.xml"));
    var adcShipment = root.Descendants().Where(e=>String.Equals(e.Value, "ADC "));
    //next query for nodes/elements inside/next to ADC shipments
于 2012-05-14T15:40:13.330 に答える