2013-10-09 67 views
2

我想解析一個XML文檔,但由於某種原因,我一直空着。我還沒有處理過很多xml文件,但是最後一個項目我做了一堆xml處理,所以我想到了相同的方法。無法解析xml文檔coldfusion xmlSeach

這裏是整個文檔:xml File

我試圖提取要約節點出使用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沒有聲明命名空間。

+0

只是作爲一個供參考一旦你宣佈了你的論點,你可以直截了當t到''在返回結果之前不需要設置2個變量。 –

回答

2

您使用的是命名空間聲明(或任何技術術語)在你的根元素,所以你需要反映在您的XPath字符串:

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

返回你在CF9的兩條記錄& Railo 4.x(通過cflive.net)。

認爲你可能對CF10問題,我認爲它的XML解析器不喜歡不實際的命名空間的命名空間的語法(如:它不會像:ChromeResponse,期待像namespacehere:ChromeResponse

你不要說哪個CF的版本,所以我不知道這是相關

注:。你也對你xmlSearch()調用缺少一個右括號,但假設這是一個錯字

+0

我正在使用CF9。在我提到的另一個xml項目中,名稱空間是「p」,但是這個名稱空間似乎沒有。你說這是嗎? –

+0

你對CF 10的假設是正確的。似乎無法找到一種用空白名稱空間搜索文檔的方法。 –

+0

這工作。謝謝。我們正在過渡到CF10,而從我正在閱讀的內容來看,當我們這樣做時,xml會被正確解析?我想我應該跟提供XML的公司談談,看看他們是否會考慮添加一個名稱空間。 –

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"> 
+0

在ColdFusion 10中,我使用XML獲取一個空數組,執行'xmlSearch(xml,「ChromeResponse」)或'xmlSearch(xml,「/ ChromeResponse」)'或'xmlSearch(xml,「// ChromeResponse」)'在鏈接中提供。 –

+0

@ScottStroz該xml根本沒有被過濾。這是我目前正在使用的xml,至少你遇到了和我一樣的問題。 –