-2

可能重复:
dom4j 的 XPATH 问题

我正在使用 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']" );

但列表返回布尔值(在这种情况下为真)。我想更改 time="555555" 的所有 3 个值。

如果我做:

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

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

4

1 回答 1

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>

如果您想要时间为 555555 的所有“名称”节点,那么您需要

//name[@time = '555555']

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

//name[@time = '555555']/element1/value
于 2010-12-16T18:01:25.050 回答