加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xpath – 使用XMLSearch在XML元素中搜索的正确或错误方式?

发布时间:2020-12-16 23:47:57 所属栏目:百科 来源:网络整理
导读:给出以下 XML: cfsavecontent variable="xml"root parent childI'm the first/child childSecond/child child3rd/child /parent parent childOnly child/child /parent parent childI'm 10/child childI'm 11!/child /parent/root/cfsavecontent 这是循环每
给出以下 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”)’以仅从当前’父’获取子元素?

谢谢.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读