2

我正在尝试解析一个 xml 文档,但由于某种原因,我一直空着。我没有处理过很多 xml 文件,但是上一个项目我做了一堆 xml 处理,所以我认为相同的方法可以工作。

这是整个文档:xml文件

我正在尝试xmlSearch()在 cfc 函数中使用 , 提取报价节点(刚刚启动项目,所以这里有很多):

<cffunction name="getOffers" access="public">
    <cfargument name="theXML" type="xml" required="true" />

    <cfset var temp =  []>

    <cfset temp = xmlSearch(arguments.theXML, "ChromeResponse/OfferVehicles/OfferVehicle/Offers/Offer")>

</cffunction>

在这种特殊情况下,我希望数组包含两个元素,但它是空的。我已经尝试了一切组合,但似乎没有什么对我有用。我有一种感觉,这是一些我没有看到的小东西,但我找不到它。

有什么想法吗?

提前致谢


解决方案:

xml 没有声明命名空间。

4

2 回答 2

2

您在根元素中使用命名空间声明(或任何技术术语),因此您需要在 xpath 字符串中反映它:

/:ChromeResponse/:OfferVehicles/:OfferVehicle/:Offers/:Offer

这将为我返回您在 CF9 和 Railo 4.x 上的两条记录(通过cflive.net)。

认为您可能在 CF10 上遇到问题,因为我认为它的 XML 解析器不喜欢没有实际命名空间的命名空间语法(例如:它不会:ChromeResponse喜欢namespacehere:ChromeResponse.

你没有说哪个版本的CF,所以我不知道这是否相关。

注意:您的xmlSearch()通话中也缺少右括号,但假设这是一个错字。

于 2013-10-09T16:46:19.343 回答
0

每当我对这些进行调试时,我都会越来越深入地研究结构。尝试一些类似的东西

<cfset temp = xmlSearch(arguments.theXML, "ChromeResponse">

<cfset temp = xmlSearch(arguments.theXML, "ChromeResponse/OfferVehicles">

<cfset temp = xmlSearch(arguments.theXML, "ChromeResponse/OfferVehicles/OfferVehicle">

<cfset temp = xmlSearch(arguments.theXML, "ChromeResponse/OfferVehicles/OfferVehicle/Offers">
于 2013-10-09T16:45:23.130 回答