我知道XMLSearch()将返回一组XML节点集。但这不是我需要的。例如,目前我在xml节点上,我想移动到下一个节点,(它的兄弟),怎么办呢?我所知道的是使用XMLSearch()和XPath,但我真的需要的是XML元素或XML文档而不是数组。
如何将返回的数组更改为XML,还是有其他更好的方法吗?
是否可以先使用ArrayToList然后使用XMLParse将列表转换为xml文档?
答案 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,你会有一个新的小学习曲线,但它是一条有用的曲线。