【问题标题】:how to write a xpath to extract a node value with conditions on both an attribute and value如何编写 xpath 以提取具有属性和值条件的节点值
【发布时间】:2016-10-03 15:23:03
【问题描述】:

使用我的 c# 应用程序,我需要编写一个 xpath 来检查具有属性 alias 的节点是否具有值 titlekeywords,其中包含一个字符串值,例如 knowledge 返回一个节点值aliasdescription

我的示例 xml 如下。我需要来自 xml 的值 required description

<?xml version="1.0" encoding="UTF-8"?>
<nodes>
 <node> 
   <data alias="title">knowledge is power</data>
   <data alias="description">required description</data>
   <data alias="keywords">knowledge, power</data>   
</node>

 <node> 
   <data alias="title">Another title</data>
   <data alias="description">Lorem ipsum dolor sit amet, consectetur adipiscing elit </data>
   <data alias="keywords">Lorem, Ipsum</data>
 </node>
</nodes>

我正在尝试这些线路,但它似乎不起作用

if (xdoc.SelectNodes("nodes/node/data[(@alias='title' or 'keywords')]/[contains(., 'knowledge')]").Count > 0)
   {
      // extract the description node value here
   }

【问题讨论】:

    标签: c# xml xpath


    【解决方案1】:

    你需要在or的两边指定@alias:

    if (xdoc.SelectNodes("nodes/node/data[@alias='title' or @alias='keywords']/[contains(., 'knowledge')]").Count > 0)
    

    【讨论】:

      【解决方案2】:
      string[] text = new string[10];
      if (xDoc.SelectNodes("nodes/node/data[@alias='title' or @alias='keywords'][contains(text(),'knowledge')]").Count > 0)
      {
          var xmlNodes = xDoc.SelectNodes("nodes/node/data[@alias='title' or @alias='keywords'][contains(text(),'knowledge')]");
          int i=-1;
          foreach (XmlNode item in xmlNodes)
          {
              i++;
              text[i] = item.InnerText.ToString();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-17
        • 1970-01-01
        • 2015-04-10
        • 1970-01-01
        • 1970-01-01
        • 2013-06-11
        • 2011-11-20
        相关资源
        最近更新 更多