2

これはおそらく私が作っているよりもはるかに簡単です。XElement からすべてのマシンを引き出すことができますが、特定のシーケンス番号でマシンを引き出す方法を見つけようとしています。以下の XML スニペットでは、sequence = 1 のマシンを使用したいと思います。

XML:

<Location>
  <Sequence>1</Sequence>
  <Machines>
    <Machine></Machine>
    <Machine></Machine>
  </Machines>
</Location>
<Location>
  <Sequence>2</Sequence>
  <Machines>
    <Machine></Machine>
    <Machine></Machine>
  </Machines>
</Location>

コード:

IEnumerable<XElement> locSeqMachines = 
                      from seq in LocationRows.Descendants("Location")
                      select seq;

var eMachines = locSeqMachines.Descendants("Machine");
foreach (var machine in eMachines)
{   
}
4

4 に答える 4

2

このような何かが仕事をするはずです:

int soughtId = 1; // Assuming this is coming from somewhere
string soughtIdStr = soughtId.ToString();
var machines = LocationRows.Descendants("Location")
                           .Where(l => (string)l.Element("Sequence") == 
                                       soughtIdStr)
                           .Descendants("Machine");
于 2013-03-02T06:23:56.287 に答える
1

このコードは、ロケーションのシーケンス値でフィルタリングされたロケーションタグからすべてのマシンデータをグループ化します。

var locSeqMachines = from seq in LocationRows.Descendants("Location")
                     where seq.Element("Sequence").Value == "1"
                     select new {
                         Sequence = seq.Element("Sequence").Value,
                         Machines = from m in seq.Descendants("Machines").Elements()
                                    select m.Value
                     };

データにアクセスする(およびスニペットをテストする)方法を示すコードを次に示します。

foreach (var location in locSeqMachines) {
    Console.WriteLine("sequence: {0}", location.Sequence);
    foreach (var machine in location.Machines) {
        Console.WriteLine(" machine: {0}", machine);
    }
}
于 2013-03-02T08:09:49.887 に答える
1

XPathを使用して、特定の順序でノードを選択できます。

XmlNodeList nodeList = root.SelectNodes("descendant::Location[Sequence='1']");
于 2013-03-02T06:22:45.540 に答える
0

指定された xml を解析する際に、このメソッドを使用して、複数のルート要素のエラーを発生させずに回答を得ることができます。

    var xmlText =   @"<root>
                       <Location>
                        <Sequence>1</Sequence>
                        <Machines>
                          <Machine></Machine>
                          <Machine></Machine>
                        </Machines>
                       </Location>
                       <Location>
                        <Sequence>2</Sequence>
                        <Machines>
                          <Machine></Machine>
                          <Machine></Machine>
                         </Machines>
                       </Location>
                      </root>";

    var elements     = XElement.Parse(xmlText);
    var machineWith1 = from subElem in elements.Elements("Location")
                           where subElem.Element("Sequence").Value == "1"
                           select subElem.Element("Machines").Elements("Machine");

次に、このための machineWith1 の値を確認できます。

于 2013-03-02T10:43:45.297 に答える