Xpath 使用XMLSearch在XML元素中搜索是正确的还是错误的方法?

Xpath 使用XMLSearch在XML元素中搜索是正确的还是错误的方法?,xpath,coldfusion,Xpath,Coldfusion,给定以下XML: <cfsavecontent variable="xml"> <root> <parent> <child>I'm the first</child> <child>Second</child> <child>3rd</child> </parent> <parent>

给定以下XML:

<cfsavecontent variable="xml">
<root>
    <parent>
        <child>I'm the first</child>
        <child>Second</child>
        <child>3rd</child>
    </parent>
    <parent>
        <child>Only child</child>
    </parent>
    <parent>
        <child>I'm 10</child>
        <child>I'm 11!</child>
    </parent>
</root>
</cfsavecontent>

我是第一个
第二
第三
独生子女
我十岁了
我11岁了!
这是循环遍历每个父级然后从该父级提取所有子级的最佳方法吗

<cfset xml = XMLParse(Trim(xml))>

<cfset parents = XMLSearch(xml, "//parent")>

<cfloop array="#parents#" index="parent">

    <cfset parent = XMLParse(parent)><!--- Is this needed? --->

    <cfset children = XMLSearch(parent, "//child")>

    <cfloop array="#children#" index="child">
        <cfoutput>#child.XmlText#</cfoutput>
    </cfloop>

</cfloop>

#child.XmlText#
我问这个问题的原因是因为我从未能够从当前XML元素中提取所有子元素

“这是必要的吗?”注释突出显示了我添加的一行,以使继续进行的一行工作。但是,是否可以删除这一行并以某种方式更改“XMLSearch(parent,“//child”)”以仅从当前“parent”获取子元素

谢谢

<cfset parent = XMLParse(parent)><!--- Is this needed? --->
要在搜索节点时创建ColdFusion荣誉上下文,需要执行以下操作:

XMLSearch(parent, ".//child")
-------------------^
如果使用
“//”
启动XPath表达式,则ColdFusion显然会搜索节点所属的整个文档,而不仅仅是该节点的子体

但是,如果您对输出文档中的所有
元素感兴趣,为什么不这样做呢:

<cfset children = XMLSearch(xml, "//child")>


是的,我明白了,但是当在这些父节点上循环时,我想在每个节点中搜索。我一直想不出这句话的版本。。。所以我想,把“parent”从一个XML元素变成一个XML文档,这样XPath就更容易了。我需要所有子元素,但只需要当前父元素。请尝试在循环中搜索“//child”。执行“//child”显然会触发文档范围内的搜索,而从“.”开始则会尊重上下文。然而,在所有父对象上循环,仅在循环中输出其所有子对象是毫无意义的。您可以直接选择它们,因此我希望这只是一个示例,您的应用程序不仅仅是在嵌套循环中运行XmlSearch()。:-)是的,XMLSearch(parent,“//child”)获取文档中的所有子级,XMLSearch(parent,“../child”)获取当前父级中的子级。汤姆,干杯+1--CF似乎不尊重XmlSearch()中的上下文,这确实有点违反直觉。
<cfset children = XMLSearch(xml, "//child")>