2015-02-23 35 views
0

我有以下XML「榜樣」選擇屬性值,其中另一個屬性等於特定的字符串值

<methods> 
    <method name="listcust" > 
    <objects> 
     <object name="ExampleTest" type="" version=""> 
     <properties> 
      <property name="FirstName" type="text"> 
      <mappings> 
       <mapping type="property"> 
       <property name="fn" /> 
       </mapping> 
      </mappings> 
      </property> 
      <property name="LastName" type="text"> 
      <mappings> 
       <mapping type="property"> 
       <property name="ln" /> 
       </mapping> 
      </mappings> 
      </property> 
      <property name="BirthDate" type="datetime"> 
      <mappings> 
       <mapping type="property"> 
       <property name="bd" /> 
       </mapping> 
      </mappings> 
      </property> 
     </properties> 
     </object> 
    </objects> 
    </method> 
</methods> 

和我試着去選擇的「名稱」屬性附加傷害值說

<property name="LastName" type="text"> 

當該元素內的屬性的「名稱」 等於「ln」時<property name="ln" />

我嘗試以下

var query = from p in xdoc.Descendants("property") 
      where p.Descendants("property").Attributes("name").Contains(new XAttribute("name", "ln")) 
      select p.Attribute("name").Value; 

var res = query.ToList<string>(); 

,但我得到任何結果回來。

如果我打破它一步一步

XDocument xdoc = XDocument.Parse(xml); 
var props = xdoc.Descendants("property").Descendants("property"); 
var nameAtt = props.Attributes("name"); 
var contains = nameAtt.Contains(new XAttribute("name", "ln")); 

然後,我可以看到nameAtt包含的屬性包括<property name="ln" />之一,但的列表包含布爾仍然是假

如果任何人都可以指出正確的方式做select \ where或perharps甚至是一個完全不同的更有效的方式來檢索一個屬性值,其中它的子節點屬性值等於一個在

感謝

通過

回答

3

你只需要改變Where條件:

where p.Descendants("property").Any(x => (string)x.Attribute("name") == "In") 

Any將檢查是否存在具有name屬性等於In

+0

THX的任何元素,做了訣竅.. – Domitius 2015-02-23 12:43:18

相關問題