0

更新する必要のある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>
4

1 に答える 1

2

XPathで「contains」演算子(Alejandroはこれは厳密な一致ではないことを指摘しています)を使用することをお勧めします。ColdfusionでXPathを実行するには、XMLオブジェクトでxmlSearch関数を使用します。normalize-space()関数は、先頭と末尾の空白を削除します(たとえば、2010年ノードのCRを修正します)。

XPathは年ノードと直接一致しているため、「/..」を使用して年ノードの親をフェッチします。これは、他の兄弟ノードのいずれかを1年ごとに操作したい場合です(たとえば、「数量」ノードなどもあった場合)。

<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個以上の結果を取得する可能性があるためです。

于 2010-11-15T22:03:39.453 に答える