【问题标题】:Retrieving parent nodes of a specified empty child node检索指定空子节点的父节点
【发布时间】:2013-08-24 05:45:44
【问题描述】:

我正在尝试使用 XPATH 返回 XML 中子节点的父节点,该子节点在 PL/SQL 过程中不包含任何内容。

到目前为止,我有以下 XMLextract,它将返回子节点的包装父节点,该子节点的 id 为 10 或 11,其中 p_xml_content 是我的 xml 文档。

   xmltype(p_xml_content).extract('//return/issueEventType[id=11] /../. | //return/issueEventType[id=10] /../.')

我需要将此语句转换为返回所有包含空的completionDate 节点的返回标记。

我是这么想的,但不确定这是否可行:

   xmltype(p_xml_content).extract('//return[completionDate=''] /../.')

有什么想法吗?

干杯

Jezzipin

【问题讨论】:

  • 请给我们一个示例 XML,以便为您提供 XPath espression。也许您需要的是 //return//*[completionDate='']/.. 但要确保我们需要 XML 结构

标签: xml xpath plsql oracle11g


【解决方案1】:

假设“空的completionDate 节点”意味着“没有子节点的completionDate 元素”,这将转换为completionDate[not(node())]

并且“所有包含空的completionDate节点的返回标签”因此转换为

//return[completionDate[not(node())]]

那就试试吧:

xmltype(p_xml_content).extract('//return[completionDate[not(node())]]')

你的表达方式,稍作修改,//return[completionDate=""] 也可以。

使用以下示例 XML

<sample>
    <return id="1">
        <completionDate></completionDate>
        <otherData>some data</otherData>
    </return>
    <return id="2">
        <completionDate>2013-09-10</completionDate>
    </return>
    <return id="3">
        <completionDate />
        <otherDataAlt>more data</otherDataAlt>
    </return>
    <return id="4">
        <completionDate>2013-09-11</completionDate>
        <otherDataAlt>alt data</otherDataAlt>
    </return>
    <return id="5">
        <completionDate></completionDate>
    </return>
    <return id="6">
        <completionDate />
    </return>
</sample>

//return[completionDate=""]//return[completionDate[not(node())]] 返回 ID 为 1、3、5 和 6 的 &lt;return&gt; 节点。(在 http://www.xpathtester.com/http://www.freeformatter.com/xpath-tester.html 上测试)

【讨论】:

  • 我用解释编辑了我的答案,但我对“空子节点”的理解可能是错误的
  • 这个假设是不正确的,因为节点可以包含内容以及其他节点。我的completionDate 节点没有任何子节点,只有Date Here 等内容。我希望在这些标签为空时返回父节点返回,例如
  • completionDate[not(node())] 断言适用于&lt;completionDate&gt;&lt;/completionDate&gt;。并且//return[completionDate=''] 也应该在您的情况下作为完整的表达方式。我尝试了一些带有&lt;return&gt;&lt;completionDate&gt;&lt;/completionDate&gt;&lt;/return&gt;&lt;return&gt;&lt;completionDate&gt;some text&lt;/completionDate&gt;&lt;/return&gt;&lt;return&gt;&lt;completionDate /&gt;&lt;/return&gt; 的XML,并且两个表达式都返回了2 个空节点,或者带有= ''[not(node())] 谓词。如果您按照@BillVelasquez 的要求发布示例 XML 内容,我可以确认或确认
  • 或者你的意思是&lt;completionDate&gt; 节点并不总是&lt;return&gt; 的“直接”子节点?如果是,[not(node())] 仅适用于&lt;completionDate&gt;,所以没关系
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多