我有一个需要更新的 xml 文件。用户希望能够选择年份和金额。什么是最好的方法?
谢谢
<root>
<SGA>
<Year>2008</Year>
<Amt>940</Amt>
</SGA>
<SGA>
<Year>2009</Year>
<Amt>980</Amt>
</SGA>
<SGA>
<Year>2010</Year>
<Amt>1000</Amt>
</SGA>
</root>
我有一个需要更新的 xml 文件。用户希望能够选择年份和金额。什么是最好的方法?
谢谢
<root>
<SGA>
<Year>2008</Year>
<Amt>940</Amt>
</SGA>
<SGA>
<Year>2009</Year>
<Amt>980</Amt>
</SGA>
<SGA>
<Year>2010</Year>
<Amt>1000</Amt>
</SGA>
</root>
您可能希望在 XPath 中使用“包含”运算符(Alejandro 指出这不是严格匹配)匹配。要在 Coldfusion 中执行 XPath,请对 XML 对象使用xmlSearch 函数。normalize-space() 函数修剪前导和尾随空格(修复,例如 2010 年节点中的 CR)。
因为 XPath 直接匹配年份节点,所以我们使用“/..”来获取年份节点的父节点。这是如果您想对任何其他同级节点进行操作(例如,如果还有一个“数量”节点或其他东西)。
<cfxml variable="foo">
<root>
<SGA>
<Year>2008</Year>
<Amt>940</Amt>
</SGA>
<SGA>
<Year>2009</Year>
<Amt>980</Amt>
</SGA>
<SGA>
<Year>2010
</Year>
<Amt>1000</Amt>
</SGA>
</root>
</cfxml>
<cfset targetYear=" 2010">
<cfset newAmount=2000>
<cfdump var="#foo#">
<!--- returns an array of matching nodes. --->
<cfset bar = xmlSearch(foo,"/root/SGA/Year[normalize-space()='#trim(targetYear)#']/..")>
<cfdump var="#bar#">
<cfset bar[1].Amt.xmlText = newAmount>
<cfdump var="#foo#">
在实际应用程序中,您可能希望将 xmlSearch 的结果(在本例中为 bar)作为数组进行迭代,因为存在获得 0 或多于 1 个结果的可能性。