【发布时间】:2019-12-25 21:29:10
【问题描述】:
我正在寻找可以在具有存储 XML 的列之一的表上运行的 Oracle 查询 此查询应动态地采用查询中的 xpath 以从所有节点中提取字符串。我在下面尝试过,但我必须对 xpath 进行硬编码。我不想硬编码 xpath。
有没有办法生成 xpath,基于 XML 的结构(结构可能会有所不同)动态提取 xml 节点值?
我需要的输出是xml节点的提取值。
我试过了:
SELECT xmltype(XMLCOLUMN).EXTRACT('/report/fulcriteria/text()'),
xmltype(XMLCOLUMN).EXTRACT('/report/conumb/text()'),
xmltype(XMLCOLUMN).EXTRACT('/report/dup/text()'),
xmltype(XMLCOLUMN).EXTRACT('/report/reportdup[1]/dupsource/text()'),
xmltype(XMLCOLUMN).EXTRACT('/report/reportdup[2]/dupsource/text()'),
xmltype(XMLCOLUMN).EXTRACT('/report/reportdup[2]/dupnumb/text()'),
xmltype(XMLCOLUMN).EXTRACT('/report/reportdup[3]/dupsource/text()'),
xmltype(XMLCOLUMN).EXTRACT('/report/reportdup[3]/dupnumb/text()') .
xmltype(XMLCOLUMN).EXTRACT('/report/final/dup/text()'),
FROM MYTABLE
【问题讨论】:
-
"这个查询应该动态地使用查询中的 xpath 从所有节点中提取字符串" 你是如何提供这个动态路径的?它在另一张桌子上吗?它是在绑定变量中传递的吗?还有什么?请edit 使用minimal reproducible example 提出您的问题,其中包含有关您如何生成查询的所有详细信息。
-
@MT0:让我澄清一下,我有一个存储 XML 文件的表 MYTABLE.XMLCOLUMN。我没有将 xpath 存储在任何表中。 XML 遵循某种结构,其中包含重复的块。因为我知道结构,所以我对 xpath 进行了硬编码。我需要一个表来存储 XPATH 吗?
-
你说“查询应该动态地采用xpath”;如果它是动态的,那么您需要从某个地方传递路径(告诉我们在哪里以及如何)。如果它不是动态的,那么您可以使用静态路径(我不确定这个问题的意义是什么)。无论您选择什么,您都需要告诉我们您的规格是什么,因为我们可以猜测并编造一些东西,但它可能不会完全符合您的意图。那么你为什么不准确地计算出你想要的东西,edit 你的问题,minimal reproducible example 告诉我们那是什么。
-
如果您只想列出 XML 文档中的所有路径和相应的值,那么这是 stackoverflow.com/q/49039401/1509264 的副本
-
@MT0 :从那个帖子中,我在“PASSING d.xml AS”doc”行收到错误,说“d.xml 是无效标识符”不知道为什么 xml 是 XMLTYPE 的列。