2014-12-03 92 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