PLSQL 从 XML 读取值(再次)?

Posted

技术标签:

【中文标题】PLSQL 从 XML 读取值(再次)?【英文标题】:PLSQL read value from XML (Again)? 【发布时间】:2011-03-22 15:02:08 【问题描述】:

我不久前发布了question about how to read values from XML,并且有一个完美的答案,它是如此简洁和简单,但我无法理解它并将其应用于其他一些 XML !!!

有人可以帮我解决这个问题吗?我需要阅读“id”或“ChangeKey”

<soap:Envelope>
<soap:Header>
 <t:ServerVersionInfo MajorVersion="8" MinorVersion="2" MajorBuildNumber="217" MinorBuildNumber="0"/>
 </soap:Header>
<soap:Body>
<m:CreateItemResponse>
<m:ResponseMessages>
<m:CreateItemResponseMessage ResponseClass="Success">
 <m:ResponseCode>NoError</m:ResponseCode>
<m:Items>
<t:CalendarItem>
 <t:ItemId Id="erwrweff3424dfw23r2fwfwsfwsfg34fwdf2" ChangeKey="sdfwwerw4224rw"/>
 </t:CalendarItem>
 </m:Items>
 </m:CreateItemResponseMessage>
 </m:ResponseMessages>
 </m:CreateItemResponse>
 </soap:Body>
 </soap:Envelope>

我真的感觉不好,因为我无法理解!

【问题讨论】:

【参考方案1】:

执行与answer you referenced 相同的操作,但将 XPath 表达式(XMLTYPE 的第二个参数)从

'//SOAProxyResult'

例如

'//t:ItemId/@Id'

'//t:ItemId/@ChangeKey'

第三个参数需要声明 t 命名空间前缀:

'xmlns:t="foobarbaz"'

当然,您的输入 XML 也需要声明该命名空间前缀。

【讨论】:

感谢分配,但这就是我从服务器获取 XML 的方式!没有命名空间! 我必须添加 xmlns:t="foobarbaz" xmlns:soap="foobarbaz" xmlns:m="foobarbaz" 这样它才能工作,hmmmmmmmm 不用担心,我解决了,我创建了一个函数,从 xml 代码中删除 :SOAP, :t, :m 然后在没有命名空间的情况下运行它,完美运行,感谢 allot 的帮助跨度> Bleah,您从服务器获取非命名空间格式的 XML?我会告诉负责该服务的人它正在输出垃圾。

以上是关于PLSQL 从 XML 读取值(再次)?的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 c# 从 xml 读取值/节点

Mirth channel XML:如何从元素内部读取多个值

使用 PL SQL 读取 XML 元素的出现

从 C# 中的大 xml 读取子节点值

如何从 dataReader 列中读取 Xml 值

如何从 android 中的 string.xml 读取值?