xpath查询,用于编辑具有其他元素中包含的相同名称和值的单个子元素

时间:2016-06-30 07:26:59

标签: java xml xpath

我试图更新一个元素中的值(逐个),但我更新了满足xpath条件的所有内容。 XML并不复杂,例如:

<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>

所有行元素具有相同的名称(行),所有行元素具有相同的元素,具有相同的名称和不同的值,但可以在元素之间重复。 通过java迭代,我得到了元素,如果我想使用以下查询XPath表达式更新第三行的ELEMENT4的值

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

它改变了所有行中所有ELEMENT4的值。如果我尝试过这样的话:

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

结果是一样的。可以使用什么xpath查询表达式将子元素的值编辑到元素中而不影响其他元素具有相同名称的子元素?...非常感谢

1 个答案:

答案 0 :(得分:0)

如果您想获得ELEMENT4的{​​{1}},请使用:

3rd row

您无需使用/root/row[3]/ELEMENT4条件。