使用XPath在xml中查找多个元素中的特定元素

时间:2017-01-17 04:30:42

标签: c# xml visual-studio xpath

以下是我的XML:

<Profile>
    <_nObjectID>1</_nObjectID>
    <_sObjectName>ABC</_sObjectName>
    <_sObjectType>10</_sObjectType>
</Profile>
<Profile>
    <_nObjectID>2</_nObjectID>
    <_sObjectName>DEF</_sObjectName>
    <_sObjectType>20</_sObjectType>
</Profile>
<Profile>
    <_nObjectID>3</_nObjectID>
    <_sObjectName>GHI</_sObjectName>
    <_sObjectType>50</_sObjectType>
</Profile>

我想知道这组配置文件中 _nObjectID = 2 _sObjectName 是什么。我们如何使用XPath找到它?

到目前为止,我尝试了以下内容:

string name = productsXML.XPathSelectElement("//Profile/_nObjectID").Value;

但结果只给了我 _nObjectID 。如何在 _nObjectID 下获取 _sObjectName

2 个答案:

答案 0 :(得分:2)

这可能会为你做到这一点

var rslt = xdc.Descendants("Profile")
              .Where(x => x.Descendants("_nObjectID").FirstOrDefault().Value == "2")
              .Select(q => q.Descendants("_sObjectName"));

如果您只想要_sObjectName的值,即DEF,那么只需要像这样调用值

var rslt = xdc.Descendants("Profile")
              .Where(x => x.Descendants("_nObjectID").FirstOrDefault().Value == "2")
              .Select(q => q.Descendants("_sObjectName").FirstOrDefault().Value);

答案 1 :(得分:0)

我不知道你正在使用的库的具体细节。但是既然你要求使用xpath方法,我会假设有一个完整的xml支持。

此查询将获取_nObjectId 2之后的_sObjectName:

  

//资料[_nObjectID /文本()= 2] / _ sObjectName

在此尝试http://www.freeformatter.com/xpath-tester.html#ad-output

如果你需要循环它,我建议你在传递xpath查询之前进行字符串格式化!