2014-12-03 90 views
0

我不确定我是否正确地写了正确的标题 - 但是总结起来似乎有点复杂。我会尽我所能在这里更好地解释。如何使用其他元素属性获取同一级别元素的值

我有一些XML看起来类似于此:

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

我想获得的property name1value使用的propery name2value。我有多个看起来很相似的对象,但只是认为将它的一个例子发布到SO会更好。

我已经有valueproperty name2这只是一个能够使用它来获得我所需要的问题。我还希望使用XML来实现这一点,并通过使用这些属性(如果订单在将来发生变化,通过索引可能会搞砸了)。

我希望这是有道理的。如果还有其他问题可以随意发表评论,我会编辑我的帖子来澄清。

+0

你将如何把这两个属性?它是通过索引还是其他属性?请详细说明。 – 2014-12-03 14:33:58

+0

我想通过属性来做到这一点,就像我上面说过的'我想通过使用propery name2的值来获得属性name的值1' - 要完全回答你的问题,我想使用属性并避免使用索引。 – scapegoat17 2014-12-03 14:38:04

+0

所以你想遍历你的XML并寻找'somevalue2',然后在此之前获取元素的值? – germi 2014-12-03 14:38:28

回答

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; 

获取有一个孩子value="somevalue2"Object元素,然后得到value基地起飞的name1

+0

我不想使用索引,但我认为它可能能够在我的脑海中工作的方式是通过获取具有'somevalue2'的'value'值的整个'Object'容器,然后选择' name1'然后获得属性'value' - 我只是不确定如何完成。那有意义吗?还是我只是疯了?哈哈 – scapegoat17 2014-12-03 15:09:04

+0

哦,我明白了。让我解决这个问题。 – Jonesopolis 2014-12-03 16:27:28

+0

@替罪羊17我更新了我的答案 – Jonesopolis 2014-12-03 16:33:09