【发布时间】:2015-12-19 13:23:44
【问题描述】:
我有 XML,我想找到 price 标签和 code
的路径 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getProductDetailsResponse xmlns="http://warehouse.example.com/ws">
<getProductDetailsResult>
<productID>12345</productID>
<productName>Стакан граненый</productName>
<description>Стакан граненый. 250 мл.</description>
<price>9.95</price>
<currency>
<code>840</code>
<alpha3>USD</alpha3>
<sign>$</sign>
<name>US dollar</name>
<accuracy>2</accuracy>
</currency>
<inStock>true</inStock>
</getProductDetailsResult>
</getProductDetailsResponse>
</soap:Body>
</soap:Envelope>
如果我删除命名空间,我可以获得值的路径-xmlns="http://warehouse.example.com/ws"... 路径是 - /soap:Envelope/soap:Body/getProductDetailsResponse/getProductDetailsResult/price/text()
但服务器只返回命名空间。
如何获取值?
提前致谢
【问题讨论】:
-
可悲的是,这又是一个说明 SOAP 过度使用的例子。您需要在 XPATH 查询中添加命名空间。执行此操作的方法因您运行 XPath(php、C#、java、xsl)的方式而异。你用什么来解析你的 SOAP XML?
-
@WilliamWalseth 我尝试将命名空间添加到 XPath,但它不起作用。我在 PL/SQL (Oracle) 中解析 xml
-
类似这篇文章的内容解释了如何。读完之后,您就会明白为什么 SOAP 太过分了。 community.oracle.com/thread/2553686?start=0&tstart=0
-
如果您可以在 PL/SQL 中应用 XSL 转换,请运行本文中的转换,然后您可以使用常规 XPath,而无需命名空间。 stackoverflow.com/questions/5268182/…
-
@WilliamWalseth 感谢威廉,您的建议。这个问题我也自己回答。