从Coldfusion中的不同节点提取XML名称/值对

时间:2010-04-08 22:55:46

标签: xml coldfusion

我正在使用XML API进行一些Plesk集成,我试图弄清楚如何解析我得到的XML响应。大多数数据都很好,但http://download1.parallels.com/Plesk/PPP9/Doc/en-US/plesk-9.2-api-rpc/index.htm?fileName=28788.htm>Limits和权限有不同的设置。基本上它们就像这样出发:

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

如果我知道我想要'foo'的值,而不是'foo2'的值,我如何从xml中提取'bar'?

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

如果你具体知道限制的“名称”是什么,你可以使用XPath。您正在寻找的是名称子节点为“foo”的任何限制节点的“value”子节点。在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>