检查xml父节点中是不是存在两个xml节点

Posted

技术标签:

【中文标题】检查xml父节点中是不是存在两个xml节点【英文标题】:check if two xml nodes exists within an xml parent检查xml父节点中是否存在两个xml节点 【发布时间】:2015-05-18 09:24:23 【问题描述】:

我正在尝试确定一个 xml 标记是否有两个特定的子标记。

XML Clob 的格式如下:

<ProductS>
<id>1</id>
<Discount></Discount>
<Promotion></Promotion>
</ProductS>
<ProductS>
<id>2</id>
<Discount></Discount>
</ProductS>

我希望我的 xmlquery 遍历这个 XML clob,并确定 ProductS 下是否有包含这两种折扣和促销类型的 xml 标记。

我的代码目前如下所示:

select existsNode(xmltype(rec1.xml), '/ProductS/Discount') into v_node_exists_discount from dual;
select existsNode(xmltype(rec1.xml), '/ProductS/Promotion') into v_node_exists_promotion from dual;

将上面的这两个语句与上述两个语句在这种情况下工作还是我需要做其他事情。

谢谢。

【问题讨论】:

【参考方案1】:

我不熟悉 oracle,但您可以像这样使用单个 xpath 轻松查询 &lt;ProductS&gt; 具有 &lt;Discount&gt;&lt;Promotion&gt;

/ProductS[Discount and Promotion]

oracle 查询可能如下所示:

select existsNode(xmltype(rec1.xml), '/ProductS[Discount and Promotion]') 
into v_node_exists_discount_and_promotion 
from dual;

【讨论】:

以上是关于检查xml父节点中是不是存在两个xml节点的主要内容,如果未能解决你的问题,请参考以下文章

解析xml时,需要校验节点是不是闭合,如必须有与之对应,用数据结构实现比较好

使用 XSLT 检查节点是不是存在

如何检查给定节点是不是存在于 XML 文档中

Xpath 获取父节点,其中子节点的两个属性具有特定值

xml查找节点父节点并删除simplexml php

如何从xml中删除列表父节点?