当前位置: 首页 > 知识库问答 >
问题:

基于属性和节点值提取节点

燕刚毅
2023-03-14

对于下面的XML,我正在尝试根据属性和节点值提取节点。

基于属性class=pass和h1包含('objectives'),我试图提取以下输出。

“目标”是节点值字符串“1任务目标”的一部分

1任务目标1目标2

<body>
  <article>
    <body>
      <section>
        <h1>intro1</h1>
        <region>introd1</region>
        <region>introd2</region>
      </section>
      <section>
        <h1 class="pass">1 task objectives</h1>
        <region>object1</region>
        <region>object2</region>
      </section>
    </body>
  </article>
</body>

下面是我正在尝试的XPath表达式。然而,这并没有产生任何输出。你能指出我做错了什么吗?

//body//section//h1[contains(.,'objectives') and @class="pass"]/*/text()

谢谢

共有2个答案

沃弘图
2023-03-14

试试这个:

//body/section/h1[contains(.,'objectives') and @class='pass']/..//text()
傅增
2023-03-14

您正在选择h1元素,但仅在其子节点内运行。您需要的xpath表达式是:

//body//section//h1[contains(.,'objectives') and @class='pass']/../*/text()

请注意...,它的范围后退到h1元素的父元素,然后对父元素的子元素进行操作。

 类似资料:
  • SyntaxError:无效输入“h”:预期为“I/I”(第10行,第28列(偏移量:346))“merge(p:primaryconsumer),其中p.name=svc.name” 我100%确信这些名称是唯一的,并且将与现有节点集中的唯一使用者名称相匹配(有待观察)。 当唯一节点属性匹配时,如何将现有属性添加到新数据中?(我希望获得唯一的ID,但我必须能够在匹配上执行新数据的更新)

  • 我很难使用下面的用例。 以下是XML: 我想要实现的是基于节点

  • 如何能够基于另一个同级节点的属性选择节点属性?我想要实现的是从所有节点中提取链接(href值),这些节点后跟具有属性class=“body table news loss”的节点跨度,即选择器应该返回https://finance.yahoo.com/news/inspiremd-announces-planned-recapitalization-120000752.html在下面的示例中。我试

  • 我将xml字符串转换成一个simpleXMLElement对象使用simplexml_load_string其值print_r输出 如何从这个对象中提取节点和属性值?使用 要获取正文的内容,节点未输出任何值 更新: XML字符串 是否同时提取节点值和属性

  • 我想递归地连接一个节点的参数值和它的父节点的相同参数值。 例如,如下: 应该成为 我试过了 有什么问题吗?

  • 我的目标是在StatusDate为1900-01-01T00:00:00时使用此XSLT样式表删除整个LoanSecondaryStatus节点,但在其他日期时保留该节点。 我有以下XML: 这是我用来尝试删除Loan二级状态节点的XSLT: