4 Stimmen

Extrahieren von XML-Namen/Wertpaaren aus verschiedenen Knoten in Coldfusion

Ich arbeite an einer Plesk-Integration mit der XML-API und versuche herauszufinden, wie ich die XML-Antwort, die ich zurückbekomme, parsen kann. Die meisten Daten sind in Ordnung, aber die http://download1.parallels.com/Plesk/PPP9/Doc/en-US/plesk-9.2-api-rpc/index.htm?fileName=28788.htm>Limits und Permissions sind anders gesetzt. Im Wesentlichen sind sie wie folgt aufgebaut:

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

Wie extrahiere ich "bar" aus der Xml-Datei, wenn ich weiß, dass ich den Wert von "foo", aber nicht den Wert von "foo2" möchte?

7voto

Ivo Sabev Punkte 5152
<cfset my_xml = XmlParse(XMLCODE) />

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

1voto

Edward M Smith Punkte 10567

Wenn Sie genau wissen, wie der "Name" des Limits lauten soll, können Sie XPath dafür verwenden. Was Sie suchen, ist der Kindknoten "value" aller Grenzwertknoten, bei denen der Kindknoten "name" "foo" ist. In XPath sieht das so aus:

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

Dies wird ein Array von Knoten zurückgeben (da es mehrere Übereinstimmungen geben kann), also müssen wir das Array behandeln. Das ganze Beispiel ist:

    <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>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X