Вы, вероятно, хотите использовать «» содержит оператор (Alejandro указывает на то, что это не строгое соответствие) матч в XPath. Чтобы выполнить XPath в Coldfusion, используйте xmlSearch function на объекте XML. Функция normalize-space() выравнивает ведущее и конечное пробелы (например, CR в узле 2010 года).
Поскольку XPath соответствует узлу year напрямую, мы используем '/ ..' для извлечения родительского узла узла года. Это если вы хотите работать на любом другом другом узле в год (например, если был также узел «количество» или что-то еще).
<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 (бар в данном случае) как массив, так как существует возможность получить 0 или более 1 результат.
Пользователь должен обновить файл, но выберите год и количество - я запутался: | Не могли бы вы объяснить немного лучше? –
Например, если пользователь хочет изменить сумму от 1000 до 2000 в теге 2010 года. – Noe
XPath - язык запросов - он не может изменить XML-документ. Чтобы создать новый XML-документ из существующего, вам понадобится дополнительный инструмент. XSLT - это язык, который был разработан специально с целью преобразования одного документа XML в другой. Задайте этот вопрос в теге xslt, и вы получите удивительно простой, короткий и мощный ответ. :) –