使用ColdFusion更新xml文件

时间:2010-11-15 20:00:58

标签: xml coldfusion xpath coldfusion-9

我有一个需要更新的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>

1 个答案:

答案 0 :(得分:2)

您可能希望在XPath中使用'contains'运算符(Alejandro指出这不是严格匹配)匹配。要在Coldfusion中执行XPath,请在XML对象上使用xmlSearch function。 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。