Обновите XML-файл с ColdFusion - PullRequest
       1

Обновите XML-файл с ColdFusion

0 голосов
/ 15 ноября 2010

У меня есть 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 Ответ

2 голосов
/ 16 ноября 2010

Возможно, вы захотите использовать оператор 'содержит' (Алехандро указывает, что это не строгое совпадение) совпадение в XPath. Чтобы выполнить XPath в Coldfusion, используйте функцию xmlSearch для объекта XML. Функция normalize-space () удаляет начальные и конечные пробелы (фиксируя, например, CR в узле 2010 года).

Поскольку 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 результата.

...