- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定以下 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/
我有这个 XML: 123 BT123 1 Test User 1234 My Place
SUCCESSSUCCESSship0000SuccessSuccess ship 9
给定以下 XML: I'm the first Second 3rd Only child
我收到如下所示的 SOAP 响应: A foo Task B bar Appointment C snafu Task
我是一名优秀的程序员,十分优秀!