XPath返回节点

时间:2010-12-16 17:39:40

标签: java xpath dom4j

  

可能重复:
  XPATH problem with dom4j

我正在使用dom4j来覆盖XML中的值。 XML看起来像这样:

<name color="blue" time="555555"> 
    <element1 param="1"> 
        <value>value1</value> 
        <value>value2</value> 
        <value>value3</value> 
    <element1> 
</name> 

<name color="blue" time="888888"> 
    <element2 param="1"> 
        <value>value1</value> 
        <value>value2</value> 
        <value>value3</value> 
    <element1> 
</name> 

我试图通过以下方式选择节点:

SAXReader saxReader = new SAXReader();
Document document =  saxReader.read(xmlLocation);
List list= document.selectNodes("//element1/@color/[@time='555555']" );

但是列表返回boolean(在这种情况下为true)。我想改变所有3个值,其中time =“555555”。

如果我这样做:

List list= document.selectNodes("//element1/@time" );

它返回节点。(属性和元素) 有没有办法直接去那个时间是555555的节点。 请帮忙。

1 个答案:

答案 0 :(得分:2)

假设以下格式良好的文件:

<names>
    <name color="blue" time="555555"> 
        <element1 param="1"> 
            <value>value1</value> 
            <value>value2</value> 
            <value>value3</value> 
        </element1> 
    </name> 
    <name color="blue" time="888888"> 
        <element1 param="1"> 
            <value>value1</value> 
            <value>value2</value> 
            <value>value3</value> 
        </element1> 
    </name> 
</names>

如果您希望所有'name'节点的时间为555555,那么您需要

//name[@time = '555555']

如果您希望名称下的所有值节点的时间为555555,那么您将需要

//name[@time = '555555']/element1/value