【发布时间】:2017-09-07 20:19:10
【问题描述】:
我在 DB 属性“object_body”中有以下 CLOB XML 片段:
<object stamp="8fc630bd-f1f5-43ac-b9d2-3b9db9054c75_1481811010527" type="Aggregation" version="12">
<property name="name" value="COA_Cash_Position" valueType="string"/>
<property name="description" value="COA_Cash_Position" valueType="string"/>
<property name="objectId" value="ef4296f1-6af6-4de8-83fe-fa01cf327d87" valueType="string"/>
<property name="branchId" value="01ecc9ed-27f3-42cb-a44d-2cec221ec8fa" valueType="string"/>
<property name="models" valueType="table">
<object type="ModelBasedTask:modelEntry" version="3">
<property name="dataModel" valueType="url">DataModel["ModifyModel[COA_Cash_Positions_BHS_Unadjusted].STAGING:X_NRS_BSL40K_BHS"{ModifyModel[ff81e5f2-2ef6-437a-b113-67f7c0dd5e53].cdf308fc-520d-4611-a8db-4e6863e216b8:9ffcd08e-732a-4270-b15f-f4775bcc69db}]</property>
<property name="instanceSelectionRule" valueType="object">
<object type="InstanceSelectionRule" version="3">
<property name="instanceDateRule" valueType="object">
<object type="InstanceSelectionRule:rule" version="3">
<property name="type" value="EQUAL" valueType="string"/>
</object>
</property>
<property name="instanceKeyRules" valueType="table"/>
</object>
</property>
</object>
</property>
</object>
目的是提取name=”description”的属性标签的值
=> 生成“COA_Cash_Position”
尝试了以下所有变体:
EXTRACTVALUE(xmltype(object.object_body), '/object/property[@name="description"].getStringVal()'),
如果我松开 .getStringVal() 查询有效,但显然只提供空结果(因为属性标签本身不包含任何值)。
主要获取以下错误消息:
ORA-31011: XML 解析失败 ORA-19202: XML 处理中发生错误 LPX-00601:无效令牌:'/object/property[@name="description"]。 getStringVal()'
简单的方法是提取两个 xml 标记之间的值,但获取一个特定的属性值(如这里 name="description" 的标记的“值”)似乎避开了 XML 提取的可能性。
非常感谢任何帮助...
【问题讨论】:
-
你的xml不好。它包含错误。
-
ORA-19202 错误是因为您试图在 Xpath 中使用 getStringVal()。它不是 Xpath 函数,而是 XMLType 对象上的 Oracle 函数。
-
@MT0 确定您放置了正确的封闭标签?我可以通过几种方式修复它,这是只有作者知道的。
-
@Seyran 修复的语义含义与问题答案的正确性无关 - 示例可以被剥离到最低限度并且所有嵌套对象都被剥离,但它仍然不会影响答案。