给出以下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>
Run Code Online (Sandbox Code Playgroud)
这是循环每个父级然后从父级中提取所有子级的最佳方法吗?
<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>
Run Code Online (Sandbox Code Playgroud)
我问的原因是因为我从来没有能够从当前的XML元素中提取所有子元素.
"这需要吗?" 注释突出显示我添加的行以使进程行工作.但是有可能删除这一行并以某种方式改变'XMLSearch(parent,"// child")'以仅从当前'父'获取子元素?
谢谢.
<cfset parent = XMLParse(parent)><!--- Is this needed? --->
Run Code Online (Sandbox Code Playgroud)
不,这不对.这甚至是性能损失,因为您以这种方式创建新的DOM.
您将获得一个XML节点数组XmlSearch()
(为什么还要使用<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>
Run Code Online (Sandbox Code Playgroud)
要在搜索节点时创建ColdFusion荣誉上下文,您需要执行以下操作:
XMLSearch(parent, ".//child")
-------------------^
Run Code Online (Sandbox Code Playgroud)
如果你用XPF表达式启动"//"
,ColdFusion显然会搜索节点所属的整个文档,而不仅仅是该节点的后代.
但如果您有兴趣输出文档中的所有 <child>
元素,为什么不这样做:
<cfset children = XMLSearch(xml, "//child")>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1915 次 |
最近记录: |