ColdFusion XMLSearch

时间:2010-12-07 06:04:27

标签: xml coldfusion

我知道XMLSearch()将返回一组XML节点集。但这不是我需要的。例如,目前我在xml节点上,我想移动到下一个节点,(它的兄弟),怎么办呢?我所知道的是使用XMLSearch()和XPath,但我真的需要的是XML元素或XML文档而不是数组。

如何将返回的数组更改为XML,还是有其他更好的方法吗?


是否可以先使用ArrayToList然后使用XMLParse将列表转换为xml文档?

3 个答案:

答案 0 :(得分:2)

数组中返回的节点是对完整xml文档中节点的引用。还有一个名为xmlparent的xml节点的未记录的“属性”。

<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::*')#">

答案 1 :(得分:0)

<!--- 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#" />

我希望有所帮助。

答案 2 :(得分:0)

如果您想要XML文档中的XML文档,可以使用XMLTransform()。

你需要构建一个XSLT但是,如果你现在使用的XPath不是动态的,它会工作。
如果你不熟悉XSLT,你会有一个新的小学习曲线,但它是一条有用的曲线。