2016-06-30 4 views
1

1つの要素(1つずつ)の値を更新しようとしていますが、xpathの条件を満たすものをすべて更新しました。 XMLは、例えば、複雑ではない:他の要素に含まれる同じ名前と値を持つ単一のサブ要素を編集するためのxpathクエリ

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <row> 
    <ELEMENT1>W</ELEMENT1> 
    <ELEMENT2>IN</ELEMENT2> 
    <ELEMENT3>RP</ELEMENT3> 
    <ELEMENT4>KKK</ELEMENT4> 
    </row> 
    <row> 
    <ELEMENT1>2</ELEMENT1> 
    <ELEMENT2>ARQ</ELEMENT2> 
    <ELEMENT3>MR</ELEMENT3> 
    <ELEMENT4>AC</ELEMENT4> 
    </row> 
    <row> 
    <ELEMENT1>3</ELEMENT1> 
    <ELEMENT2>I</ELEMENT2> 
    <ELEMENT3>RP</ELEMENT3> 
    <ELEMENT4>KKK</ELEMENT4> 
    </row> 
    <row> 
    <ELEMENT1>1</ELEMENT1> 
    <ELEMENT2>CC</ELEMENT2> 
    <ELEMENT3>XX</ELEMENT3> 
    <ELEMENT4>I</ELEMENT4> 
    </row> 
    <row> 
    <ELEMENT1>12</ELEMENT1> 
    <ELEMENT2>IN</ELEMENT2> 
    <ELEMENT3>3</ELEMENT3> 
    <ELEMENT4></ELEMENT4> 
    </row> 
</root> 

全ての行の要素は、同じ名前(行)を有し、全ての行の要素が同じ名前と異なる値と同じ要素を有するが、要素間繰り返すことができます。私は要素を取得し、私は次のクエリのXPath式を使用して第三列のELEMENT4の値を更新する場合

/root/row/ELEMENT4[text()='KKK'] 

それは私が何かをしようとしたすべてのrows.If内のすべてのELEMENT4の値を変更反復JAVAによる このように:

/root/row/ELEMENT3[text()='RP'][/root/row/[position()='3']] 

結果は同じです。他の要素と同じ名前のサブ要素に影響を与えずに、サブ要素の値を要素に編集するために使用できるxpathクエリ式は何ですか?...非常に感謝

+0

http:// wwwをマップするには、[NamespaceContext](https://docs.oracle.com/javase/8/docs/api/javax/xml/namespace/NamespaceContext.html)を用意する必要があります.w3.org/2001/XMLSchema-instance'名前空間。例[ここ](http://illegalargumentumentception.blogspot.co.uk/2009/05/java-using-xpath-with-namespaces-and.html)。 /ルート/行/ ELEMENT4 [テキスト()=「KKK」] が、それはすべての変更:XPathクエリが何かをするだけであるこれまでのところ、私が使用したがうまくいかなかったことを最初の1だったこと – McDowell

答えて

0

ELEMENT4その後、3rd rowだけ使用します。

/root/row[3]/ELEMENT4

あなたがtext()条件を使用する必要はありません。

+0

ELEMENT4 KKKの値を持つ ありがとう、 –

+0

どのXpathエンジンをお使いですか? http://www.xpathtester.com/xpathでテストしたところ、 – BludShot

+0

javax.xml.parsersが動作しています。 *、javax.xml.transform。 *、javax.xml.xpath。 *、org.w3c.dom。 * XML DOMの変換、ファイルの管理、XPathクエリのためのJava6クラス。より複雑なクエリを持つ他のXMLファイルについては、問題はありませんでしたが、この単純なXMLはありません。 –

関連する問題