0

2 つの異なる要素から派生した複数の where 句を見つけようとしています。基本的には、DataType & Service 要素の name 属性に基づいてフィルタリングできるようにしたいと考えています。フィードバックをお待ちしております。ありがとうジェイ

var services = from dt in doc.Descendants("DataType")
               where (string)dt.Attribute("name") == "WELL_INDUSTRY" && (string)dt.Elements("Service").Attributes == "Well_Industry"
               from service in dt.Elements("Services").Elements("Service").Elements("Layers").Elements("Layer")
               select new
               {
                   Name = (string)service.Attribute("name"),

               };

XML:

<DataTypes>
  <DataType name="WELL_INDUSTRY">
    <Spatial>
      <Services>
        <Service name="Well_Industry" group="Well" status="Primary" >
          <Layers>
            <layer name="Bottom Hole Wells" ></layer>
           <layer name="Bottom Hole Wells2" ></layer>
          </Layers>
4

2 に答える 2

0
var services = from dt in doc.Descendants("DataType")
               where (string)dt.Attribute("name") == "WELL_INDUSTRY"
               from s in dt.Descendants("Service")
               where (string)s.Attribute("name") == "Well_Industry"
               from l in s.Descendants("Layer")
               select new { 
                    Name = (string)l.Attribute("name") 
               };

XPath でも同じことが実現できます。

var xpath = "//DataType[@name='WELL_INDUSTRY']//Service[@name='Well_Industry']//layer";
var services = from l in doc.XPathSelectElements(xpath)
               select new {
                    Name = (string)l.Attribute("name")
               };
于 2013-08-22T15:06:07.867 に答える
0

私はあなたがそのようなものを探していると思います:

var services = from dt in doc.Descendants("DataType")
               where (string)dt.Attribute("name") == "WELL_INDUSTRY"
               from service in dt.Element("Spatial")
                                 .Elements("Services")
                                 .Elements("Service")
               where (string)service.Attribute("name") == "Well_Industry"
               from layer in service.Element("Layers")
                                    .Elements("Layer")
               select new
               {
                   ServiceName = (string)service.Attribute("name"),
                   Layers = layer.Select(x => (string)x).ToList()
               };
  1. whereの後にもう 1 つ追加できますfrom service ...
  2. クエリの一部でservice変数を使用することはできます。select

ただ、前にチェックServiceNameがあるときの問い合わせはダメみたいです。ServiceName == "myName"レイヤーの名前が必要な場合は、次を使用しますselect

               select new
               {
                   Name = (string)layes.Attribute("name")
               };
于 2013-08-22T15:03:16.877 に答える