Xpath中的逻辑和运算符以选择值

时间:2018-04-18 19:31:12

标签: c# xml xpath

我有一些像这样生成的XML

<resource id="1759" key="8f0ab89b:fb7b:45aa:8863:5c8cf4692194" parentID="1701" level="3" creatorID="0" sortOrder="5" createDate="2018:03:28T13:59:22" updateDate="2018:04:17T15:06:25" nodeName="facebook" urlName="facebook" path=":1,1378,1701,1759" isDoc="" nodeType="1705" creatorName="Scott" writerName="Scott" writerID="0" template="0" nodeTypeAlias="resource">
<resourceImage>{
"focalPoint": {
"left": 0.5,
"top": 0.5
},
"src": "/media/9566/ddd:col_116588_020117_1999x614.jpg",
"crops": [
{
  "alias": "Resource",
  "width": 320,
  "height": 238
}
]
}</resourceImage>
      <categories>Case Studies</categories>
    <resourceLink>http://facebook.com</resourceLink>
    <topic>Admissions</topic>
  </resource>

我试图使用Xpath Expression来选择主题和类别,如

//* [@id=1701]//*[@isDoc]/ topic[text()[contains(.,'Admissions')]] and category[text()[contains(.,'Webinar')]] /..
然而,我得不到匹配。我只需使用

之类的参数即可使其工作
  //* [@id=1701]//*[@isDoc]/ topic[text()[contains(.,'Admissions')]]/..

但是我确实需要能够通过两个参数进行过滤。我怎么做逻辑运算符错了?

感谢

1 个答案:

答案 0 :(得分:1)

您可以将所有条件放入一个谓词中,然后and。我将@id更改为parentID以匹配该号码。否则它就不会匹配样本数据。

匹配四个条件的XPath可以是:

//*[@parentID='1701' and @isDoc and contains(topic/text(),'Admissions') and contains(categories/text(),'Case Studies')]