【问题标题】:Select a node if a siblings child does not exist in xpath如果 xpath 中不存在兄弟姐妹子节点,则选择一个节点
【发布时间】:2013-06-25 10:48:19
【问题描述】:

在这种情况下,我需要选择没有元数据元素的标识符 6789

<dt class="document-metadata">Metadata</dt>

在 dd @class=document-manifest 兄弟下,可以使用类或文本进行检查,因为它不会改变。

<dt class="document-manifest">
    <a class="document" href="/Document/12345">12345</a>
</dt>
<dd class="document-manifest">
    <dl class="document-manifest-items">
        <dt class="document-summary">Document Summary</dt>
        <dd class="document-summary">
            <dl class="document-summary">
                <dt class="document-metadata">MetaData</dt>
            </dl>
        </dd>
    </dl>
</dd>
<dt class="document-manifest">
    <a class="document" href="/Document/6789">6789</a>
</dt>
<dd class="document-manifest">
    <dl class="document-manifest-items">
        <dt class="document-summary">Document Summary</dt>
        <dd class="document-summary">
            <dl class="document-summary">
            </dl>
        </dd>
    </dl>
</dd>

在这种情况下,它应该只选择 6789 标识符。

我尝试了很多方法似乎都无法做到。

想像下面这样的东西似乎会返回 id,无论它是否有元数据

//dt[@class='document-manifest']/a[not(../dd/dl/dd/dl/dt[@class='document-metadata'])]

【问题讨论】:

    标签: xml xpath


    【解决方案1】:

    这似乎有效,但可能是更好的方法

    //dt[@class='document-manifest']/a[../following-sibling::*[1]/dl/dd[@class='document-summary']/dl/not(dt='MetaData')]
    

    【讨论】:

    • 应该注意这在 xpath 1.0 中不起作用,我必须将 xpath 处理器更改为支持 2.0(使用 saxon)的处理器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 2018-01-13
    相关资源
    最近更新 更多