dom4j的XPATH问题

时间:2010-12-16 16:33:53

标签: xpath dom4j

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

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

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

List list= document.selectNodes("//element1[@timetime='555555']" );

但列表返回null。 我想更改time="555555"的所有3个值。

没有办法直接转到该节点。

请帮忙。

2 个答案:

答案 0 :(得分:4)

选择三个值,使用:

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

如果返回null,则可能涉及默认命名空间,这意味着您需要显示整个XML。

XPath很灵活,如果你想要你可以像这样表达:

//value[ancestor::name[1]/@time='555555']

答案 1 :(得分:1)

您正在使用的XPath是在element1 上查找等于555555 的时间属性。但是,您的时间属性位于名称节点上。

您可以选择Tomalak建议的方式,也可以将其更改为:

//element1[../@time='555555']

这是在寻找一个的element1节点,其时间属性等于555555。