【问题标题】:XPATH problem with dom4jdom4j 的 XPATH 问题
【发布时间】:2010-12-16 16:33:53
【问题描述】:

我正在使用 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 个值。

有没有办法直接去那个节点。

请帮忙。

【问题讨论】:

  • 我认为@timetime 是错字?

标签: xpath dom4j


【解决方案1】:

要选择三个值,请使用:

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

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

XPath 是灵活的,如果你愿意,你可以这样表达:

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

【讨论】:

  • //name[@time='555555']/element1/value 正在返回 null。请帮忙
  • "//element1/@time" 有效,但我想直接转到该节点。
  • @user234194:您可能想要发布您的实际 XML。我的意思是复制粘贴 varbatim,因为显然你已经制作了你的样本,而且是错误的。
【解决方案2】:

您正在使用的 XPath 正在寻找一个等于 555555 的时间属性 on element1。但是,您的时间属性位于 name 节点上。

您可以按照 Tomalak 建议的方式进行,也可以将其更改为:

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

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

【讨论】:

  • 我看到您已经更新了您的 XML,但它目前无效 - element1 节点需要关闭,而 element2 节点需要关闭 element2 节点而不是打开 element1 节点。如果我解决了这些问题,我发布的 XPath 就可以工作。我建议确保您使用的 XML 是有效的,然后首先尝试选择根节点并查看结果,然后选择根节点的子节点并查看结果等,直到您拥有您想要的正在尝试选择。
猜你喜欢
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
相关资源
最近更新 更多