如何使用另一个元素属性获取相同级别元素的值

时间:2014-12-03 14:30:38

标签: c# xml linq linq-to-xml

我不确定我是否正确地说明了这个标题 - 但总结起来似乎有点复杂。我会尽力在这里做更好的解释。

我有一些类似于此的XML:

<Object type="element">
  <Property name="name1" value="somevalue1"/>
  <Property name="name2" value="somevalue2"/>
  <Property name="name3" value="somevalue3"/>
</Object>

我想使用value的{​​{1}}获得property name1的{​​{1}}。我有多个看起来相似的对象,但只是认为将它的一个例子发布到SO会更好。

我已经拥有value propery name2只是能够用它来获得我需要的东西。我还想使用XML到LINQ并使用属性(如果订单在将来更改,则通过索引可能会搞砸了)。

我希望这是有道理的。如果有任何其他问题随时发表评论,我将编辑我的帖子以澄清。

1 个答案:

答案 0 :(得分:1)

var xml = @"
            <root>
               <Object type=""element"">
                  <Property name=""test1"" value=""testvalue1""/>
                  <Property name=""test2"" value=""testvalue2""/>
                  <Property name=""test3"" value=""testvalue3""/>
               </Object>
               <Object type=""element"">
                  <Property name=""name1"" value=""somevalue1""/>
                  <Property name=""name2"" value=""somevalue2""/>
                  <Property name=""name3"" value=""somevalue3""/>
                </Object>
             </root>";

var att = XDocument.Parse(xml)
            .Descendants("Object")
            .First(ele => ele
                .Elements()
                .Any(child => child.Attribute("value").Value == "somevalue2"))
            .Elements()
            .First(ele => ele.
                Attribute("name").Value == "name1")
            .Attribute("value").Value;

获取包含Object子项的value="somevalue2"元素,然后从value

获取name1基数