我在網上搜索了很多次,希望找到解決我的問題的方法,用ColdFusion解析XML Feed的所有節點而沒有成功,所以我想我會看看你們中的任何一位能否提供幫助。ColdFusion解析所有XML子節點
爲了使這個問題的方面在這裏明確是具體的。
編碼語言:ColdFusion的10 數據源類型:XML 數據源文件:http://media.chp.ca.gov/sa_xml/sa.xml
問題:
解析的所有節點,包括兒童,在XML
解析XML時,我要麼設法只獲取每個中心ID,要麼發送一個ID爲1的調度ID子日誌節點或我獲得中心ID和調度 ID與XML文件中的每個日誌節點重複,每個調度 輸出。
目標:解析完整的XML並返回包括在同一層次與原始文件組織孩子日誌節點每個節點。
我想建立一個公共安全模塊,人們可以使用它來查看當前的交通事件的細節和位置。我一直在做這個和幾個月的工作,並且已經發現了很多功能,但是困擾我的問題只是解析完整的XML以使用ColdFusion返回每個節點。
解析XML並將返回的數據傳遞到數據庫一直非常簡單,只是我沒有得到完整的子節點集。我嘗試過嵌套循環,但最終我得到了每個日誌詳細信息,每個調度位置的整個列表,在每個調度中重複,而不僅僅是屬於特定調度節點的調度。有沒有人有可能的解決方案?
我提供了一個到上面XML的鏈接,這裏是XML結構的一個片段。
<State>
<Center ID="SAHB">
<Dispatch ID="SACC">
<Log ID="150306SA01531">
<LogTime>"Mar 6 2015 3:00PM"</LogTime>
<LogType>"1125-Traffic Hazard"</LogType>
<Location>"Sr99 S/Sr99 S Mack Rd E Ofr"</Location>
<LocationDesc>""</LocationDesc>
<Area>"South Sac"</Area>
<ThomasBrothers>""</ThomasBrothers>
<LATLON>"38476147:121424954"</LATLON>
<LogDetails>
<details/>
<units>
<UnitTime>"Mar 6 2015 3:03PM"</UnitTime>
<UnitDetail>"Unit Assigned"</UnitDetail>
</units>
<units>
<UnitTime>"Mar 6 2015 3:03PM"</UnitTime>
<UnitDetail>"Unit Assigned"</UnitDetail>
</units>
<units>
<UnitTime>"Mar 6 2015 3:03PM"</UnitTime>
<UnitDetail>"Unit Assigned"</UnitDetail>
</units>
.....
</LogDetails>
<Log ID="150306SA01531">
<LogTime>"Mar 6 2015 3:00PM"</LogTime>
<LogType>"1125-Traffic Hazard"</LogType>
<Location>"Sr99 S/Sr99 S Mack Rd E Ofr"</Location>
<LocationDesc>""</LocationDesc>
<Area>"South Sac"</Area>
<ThomasBrothers>""</ThomasBrothers>
<LATLON>"38476147:121424954"</LATLON>
<LogDetails>
<details/>
<units>
<UnitTime>"Mar 6 2015 3:03PM"</UnitTime>
<UnitDetail>"Unit Assigned"</UnitDetail>
</units>
<units>
<UnitTime>"Mar 6 2015 3:03PM"</UnitTime>
<UnitDetail>"Unit Assigned"</UnitDetail>
</units>
<units>
<UnitTime>"Mar 6 2015 3:03PM"</UnitTime>
<UnitDetail>"Unit Assigned"</UnitDetail>
</units>
.....
</LogDetails>
......
</Log>
</Dispatch>
</Center>
這是一個嵌套的循環測試,我也試圖讓每一個日誌節點的例子,但這只是創建的每一個調度節點內返回每個日誌節點的另一個實例,而不僅僅是那些是每個調度節點的直接子節點。
<pre>
<p><!--- Grab CHP XML feed --->
<cftry>
<cfhttp url="http://media.chp.ca.gov/sa_xml/sa.xml"
method="get"
resolveurl="yes"
throwonerror="yes"
timeout="7">
</cfhttp>
<cfcatch>
cfhttp failure
</cfcatch>
</cftry>
</p>
<p>
<cfoutput>
<cfset Level1XML = xmlSearch(CFHTTP.FileContent,'/State/Center')>
<cfset Level2XML = xmlSearch(CFHTTP.FileContent,'/State/Center/Dispatch')>
<cfset Level3XML = xmlSearch(CFHTTP.FileContent,'/State/Center/Dispatch/Log')>
<!---<cfdump var="#Level2XML#">--->
</p>
<p><!---Main Loop Begin--->
<cfloop from="1" to="#arraylen(Level1XML)#" index="x">
<cfset CenterXML = xmlparse(Level1XML[x])>
<span style="color:##F3C;">Count Level 1 = #x#</span>
<span style="color:##FF0000;"><strong>Center:</strong>#CenterXML.Center.XMLAttributes.ID#<br></span>
<!--- Dispatch Loop Begin--->
<cfloop from="1" to="#arraylen(Level2XML)#" index="y">
<cfset DetailsXML = xmlparse(Level2XML[y])>
<span style="color:##CC3300;">Count Level 2 = #y#</span>
<cfif CenterXML.Center.Dispatch.XMLAttributes.ID EQ DetailsXML.Dispatch.XMLAttributes.ID>
<span style="color:##00CC66;"><strong>Dispatch:</strong>#DetailsXML.Dispatch.XMLAttributes.ID#<br></span>
<cfif CenterXML.Center.Dispatch.Log.XMLAttributes.ID EQ DetailsXML.Dispatch.Log.XMLAttributes.ID>
<!---Log Loop begin--->
<cfloop from="1" to="#arraylen(Level3XML)#" index="z">
<span style="color:##00CC33;">Count Level 3 = #z#</span>
<cfset LogssXML = xmlparse(Level3XML[z])>
<strong>Log Time:</strong> #LogssXML.Log.LogTime.xmlText#<br>
<strong>Log Type:</strong> #LogssXML.Log.LogType.xmlText#<br>
<strong>Log Location:</strong> #LogssXML.Log.Location.xmlText#<br>
<strong>Log Area:</strong> #LogssXML.Log.Area.xmlText#<br>
<strong>Lat Lon:</strong> #LogssXML.Log.LATLON.xmlText#<br>
<cfif isdefined("LogssXML.Log.LogDetails.units.xmlText")>
<strong>Unit Time:</strong> #LogssXML.Log.LogDetails.units.UnitTime.xmlText#<br>
<strong>Unit Detail:</strong> #LogssXML.Log.LogDetails.units.UnitDetail.xmlText#<br><br>
</cfif>
</cfloop>
</cfif>
</cfif>
</cfloop>
</cfloop>
</cfoutput>
</pre>
我猜你在XML文件中有不同的命名空間的問題。你能發佈你的XML文件的頭文件嗎?它的重要性在於爲你提供一個可行的解決方案。 (通過頭文件,我只是指你的xml文檔中的第幾行代碼 – 2015-03-10 01:46:06
我的確看到了一些看起來像是問題的東西,但也許這是你的例子中的一個錯字,只顯示我覺得有趣的部分。 XML文件中,我看到<登錄ID =「150306SA01531」>。後來我看到這個,所以是開放的,< LogDetails>是開放的。再往下,被關閉 ,所以現在只有是開放的。然後<登錄ID =「150306SA01531」>打開另一個。現在我們有兩個 s打開。最後,並非所有的東西都關閉了。 。還有一個沒有關閉。是你的XML格式還是有更多我是沒有看到? –
Mike
2015-03-10 11:26:23