Извлечение пар имя / значение XML из разных узлов в Coldfusion - PullRequest
4 голосов
/ 09 апреля 2010

Я работаю над интеграцией Plesk с использованием XML API и пытаюсь понять, как разобрать ответ 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>

Как мне извлечь 'bar' из xml, если я знаю, что мне нужно значение 'foo', а не значение 'foo2'?

Ответы [ 2 ]

7 голосов
/ 09 апреля 2010
<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 голос
/ 13 апреля 2010

Если вы точно знаете, каким будет «имя» лимита, вы можете использовать XPath для этого. То, что вы ищете, является дочерним узлом «value» любых предельных узлов, где дочерний узел с именем «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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...