【问题标题】:Finding a specific element in multiple elements in xml using XPath使用 XPath 在 xml 中的多个元素中查找特定元素
【发布时间】:2017-01-17 04:30:42
【问题描述】:

下面是我的 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

【问题讨论】:

    标签: c# xml visual-studio xpath


    【解决方案1】:

    这可能对你有用

    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);
    

    【讨论】:

    • 第一个答案会给出什么结果?
    • 我的编码给出错误..它无法识别“Where”命令..如何解决这个问题?
    • 第一个将给出&lt;_sObjectName&gt;DEF&lt;/_sObjectName&gt;,它无法识别Where,因为你必须包含using System.Linq;
    • 嗨,但我得到的结果是“System.Linq.Enumerable”
    • 为了您的信息,我想要 C# 语言
    【解决方案2】:

    我不知道您使用的库的具体情况。但是由于您要求使用 xpath 方式来执行此操作,我将假设有完整的 xml 支持。

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

    //Profile[_nObjectID/text()=2]/_sObjectName

    在这里试过http://www.freeformatter.com/xpath-tester.html#ad-output

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      • 2020-04-25
      • 2011-07-06
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 2021-09-07
      相关资源
      最近更新 更多