我在这里进行了广泛的搜索,以获取有关解析 XML 字段的类似查询,这些字段预计会返回 1 个或多个相同的标签。在尝试解析多行之前,我已尝试导出至少一条记录,但它仍然返回 Null。
此时,我完全不明白为什么会发生这种情况。
来自列名称“XMLPref”的 XML 示例:
<ParentProfiler>
<SettingExp>
<Entity name="companycode" type="robot" value="fn8ks92in"></Entity>
<Entity name="locationcode" type="dummy" value="CO"></Entity>
<Entity name="companycode" type="dummy" value="0xm9n4mdk"></Entity>
</SettingExp>
</ParentProfiler>
我正在尝试用
<Entity>
解析所有 name = "companycode"
标签并检索与它们关联的值。其他一些 XML 非常大,因此我将上面的 XML 简化为仅三个实体。
我下面的测试查询是尝试使用旧的
extractvalue(xmltype
方法和 XMLTABLE
方法。
测试查询:
select z.test1, z.test2, b.XMLPref
,extractvalue(xmltype(b.XMLPref),'//ParentProfiler/SettingExp/Entity[@name="companycode"]/@value[0]') as TestingOldMethod
from test.XMLTABLE b,
XMLTABLE('/ParentProfiler/SettingExp'
PASSING XMLTYPE(b.XMLPref)
COLUMNS test1 VARCHAR2(100) PATH 'Entity[@name="companycode"]/text()' --'Entity/text()'
,test2 VARCHAR2(100) PATH 'Entity[1]' -- 'Values/string-join(./Entity/text(), ",")',
) z
尝试路径的不同变体后,无论是单个解析(第一次迭代)还是多个解析,都会返回 NULL。有人可以帮忙吗?
您可以转到 XPath 中的(已过滤的)
Entity
节点,然后从中获取 values
属性:
XMLTABLE(
'/ParentProfiler/SettingExp/Entity[@name="companycode"]'
PASSING XMLTYPE(b.XMLPref)
COLUMNS value VARCHAR2(100) PATH '@value'
)
例如,保留令人困惑的
xmltable
表名称:
select x.value
from xmltable b
cross apply XMLTABLE(
'/ParentProfiler/SettingExp/Entity[@name="companycode"]'
PASSING XMLTYPE(b.XMLPref)
COLUMNS value VARCHAR2(100) PATH '@value'
) x
价值 |
---|
fn8ks92in |
0xm9n4mdk |