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