返回节点的 XPath

发布于 2024-10-08 11:07:45 字数 1132 浏览 1 评论 0原文

可能的重复:
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']" );

但列表返回布尔值(在本例中为 true)。我想更改 time="555555" 的所有 3 个值。

如果我这样做:

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

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

Possible Duplicate:
XPATH problem with dom4j

I am using dom4j to overwrite a value in the XML. The XML looks like this:

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

I am trying to select nodes by:

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

but the list returns boolean(which is true in this case). I wanted to change all the 3 values where time="555555".

If I do:

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

It returns nodes.(attributes and elements)
Isn't there a way to directly go to that node where time is 555555.
please help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

萌︼了一个春 2024-10-15 11:07:45

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

<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

Assuming the following well-formed document:

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

If you want all 'name' nodes with a time of 555555 then you'll need

//name[@time = '555555']

If you want all value nodes underneath name with a time of 555555 then you'll need

//name[@time = '555555']/element1/value
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文