2010-04-08 94 views
4

我正在使用XML API進行一些Plesk集成,並試圖找出如何解析我回來的XML響應。大部分數據都很好,但http://download1.parallels.com/Plesk/PPP9/Doc/en-US/plesk-9.2-api-rpc/index.htm?fileName=28788.htm>限制和權限都有不同的設置。最根本的是載像這樣:在Coldfusion中從不同節點中提取XML名稱/值對

<data> 
    <limits> 
    <limit> 
     <name>foo</name> 
     <value>bar</value> 
    </limit> 
    <limit> 
     <name>foo2</name> 
     <value>bar2</value> 
    </limit> 
    </limits> 
</data> 

我如何提取XML「酒吧」因爲我知道我要「富」的價值,而不是「foo2的」的價值?

回答

7
<cfset my_xml = XmlParse(XMLCODE) /> 

<cfoutput> 
1: #my_xml.data.limits[0].limit.value# 
<br />2: #my_xml.data.limits[1].limit.value# 
</cfoutput> 
+0

感謝您的幫助。我認爲可能有一種方法,我不必手動指定節點號(以防在某些時候發生變化),但這看起來是我能找到的最佳答案。我應該指出,我必須將[0]移到限制之後,並且必須在值後面指定.xmlText,但這可能是由於我對這個問題的解釋不好。 – 2010-04-08 23:28:38

+0

你可以通過my_xml.data.limits進行循環,如果你正在尋找一種方法來獲得所有的limit.value值,那麼它將會給你所有的limit.value值。 – 2010-04-08 23:43:10

1

如果你知道具體是什麼限制的「名」將是,你可以使用XPath這一點。您要查找的是名稱子節點爲「foo」的任何限制節點的「值」子節點。在XPath,這看起來像:

'/data/limits/limit[name = 'foo']/value' 

這將返回節點的數組(因爲可以有多個比賽),所以我們需要處理的數組。整個例子是:

<cfset myXML = " 
    <data> 
     <limits> 
     <limit> 
      <name>foo</name> 
      <value>bar</value> 
     </limit> 
     <limit> 
      <name>foo2</name> 
      <value>bar2</value> 
     </limit> 
     </limits> 
    </data> 
"> 
<!--- Parse the string into an XML Object ---> 
<cfset XMLDOM = xmlParse(myXML)> 
<!--- Search the XML Object for specific nodes ---> 
<cfset nodeArray = xmlSearch(XMLDOM,"/data/limits/limit[name = 'foo']/value")> 
<!--- Loop over the returned array of XML Node objects and print the XMLText (the node value) ---> 
<cfloop array="#nodeArray#" index="thisNode"> 
    <cfoutput>#thisNode.xmlText#</cfoutput> 
</cfloop>