ColdFusion XMLSearch - PullRequest
       0

ColdFusion XMLSearch

1 голос
/ 07 декабря 2010

Я знаю, что XMLSearch () вернет массив наборов узлов XML.Но это НЕ то, что мне нужно.Например, в настоящее время я нахожусь на узле xml и хочу перейти к следующему узлу (его брату), как это сделать?Что я знаю, так это использовать XMLSearch () и XPath, но мне действительно нужно то, что я получил - это все еще элемент XML или документ XML, а не массив.

Как я могу изменить возвращенный массив на XML или есть какой-либо другойлучший способ?


Возможно ли сначала использовать ArrayToList, а затем использовать XMLParse для преобразования списка в документ XML?

Ответы [ 3 ]

2 голосов
/ 07 декабря 2010

Узлы, возвращаемые в массиве, являются ссылками на узлы в полном XML-документе. Существует также недокументированный «атрибут» узла xml под названием xmlparent.

<cfxml variable="foo">
    <employee>
        <!-- A list of employees -->
        <name EmpType="Regular">
            <first>Almanzo</first>
            <last>Wilder</last>
            <Status>Medical Absence</Status>
            <Status>Extended Leave</Status>
        </name>
        <name EmpType="Contract">
            <first>Laura</first>
            <last>Ingalls</last>
        </name>
    </employee>
</cfxml>

<cfdump var="#foo#">

<cfset bar = xmlSearch(foo,"/employee/name/last[normalize-space()='Wilder']")>

<!--- If you know the node name of the sibling, you can just access it --->
<cfdump var="#bar[1].xmlparent['first']#">

<!--- If you don't know the node names, and just want to traverse via preceding and following order, you can do another xpath on the returned nodes --->

<cfdump var="#xmlSearch(bar[1],'./preceding-sibling::*')#">
<cfdump var="#xmlSearch(bar[1],'./following-sibling::*')#">
0 голосов
/ 15 января 2015

Если вы хотите получить документ XML из документа XML, вы можете использовать XMLTransform ().

Вам потребуется создать XSLT, но если используемый вами XPath не является динамическим, он будет работать.
Если вы не знакомы с XSLT, у вас есть новая небольшая кривая обучения, но это полезная кривая для подъема.

0 голосов
/ 07 декабря 2010
<!--- Create an example XML document ---->
<cfxml variable="xml">

    <node1>
        <child>hello1</child>
        <child>hello2</child>
    </node1>

</cfxml>

<!--- Search for nodes you need --->
<cfset res = xmlSearch(xml, "/node1/child") />

<!--- Output just the 2nd child as an XML document --->
<cfset xmlAsString = toString(res[2]) />

<cfdump var="#xmlAsString#" />

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...