gpt4 book ai didi

xpath - 使用 XMLSearch 在 XML 元素中搜索的方式正确还是错误?

转载 作者:行者123 更新时间:2023-12-02 11:37:31 27 4
gpt4 key购买 nike

给定以下 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>

这是循环每个父级然后从该父级中提取所有子级的最佳方法吗?

<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>

我问这个问题的原因是因为我一直无法从当前 XML 元素中提取所有子元素。

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

谢谢。

最佳答案

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

不,不是。这甚至会降低性能,因为您以这种方式创建了新的 DOM。

您从 XmlSearch() 返回一组 XML 节点(否则为什么要使用<cfloop array...?)。这意味着这些应该是等效的:

<!-- new CF8 syntax -->   
<cfloop array="#parents#" index="parent">
<cfdump var="#parent#">
</cfloop>

<!-- old syntax -->
<cfloop from="1" to="#ArrayLen(parents)#" index="i">
<cfdump var="#parents[i]#">
</cfloop>

要使 ColdFusion 在搜索节点时尊重上下文,您需要执行以下操作:

XMLSearch(parent, ".//child")
-------------------^

如果 XPath 表达式以 "//" 开头,ColdFusion 显然会搜索该节点所属的整个文档,而不仅仅是该节点的后代。

但是如果您有兴趣输出全部 <child>文档中的元素,为什么不这样做:

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

关于xpath - 使用 XMLSearch 在 XML 元素中搜索的方式正确还是错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/986493/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com