【问题标题】:XPATH testing two elements with same attributeXPATH 测试具有相同属性的两个元素
【发布时间】:2017-10-03 20:32:03
【问题描述】:

给定这个 xml:

<illustratedPartsCatalog>
    <figure id="fig1">...</figure>
    <catalogSeqNumber>...</catalogSeqNumber>
    <figure id="fig2" changeType="delete">...</figure>
    <catalogSeqNumber>...</catalogSeqNumber>
    <figure id="fig3" changeType="delete">...</figure>
    <catalogSeqNumber>...</catalogSeqNumber>
    <figure id="fig6">...</figure>
</illustratedPartsCatalog>

来自illustratedPartsCatalog 是否可以更紧凑地编写如下XPATH?

<xsl:if test="figure/@changeType='delete' or descendant::*/@changeType='delete'">

例如,我尝试了很多变体,但都失败了:

*[figure | descendant]/@changeType='delete'

【问题讨论】:

    标签: xml xslt xpath xslt-1.0


    【解决方案1】:

    因为figureillustratedPartsCatalog 的后代,所以你可以写这个...

    <xsl:if test="descendant::*/@changeType='delete'">
    

    或者更好的是,这个...

    <xsl:if test=".//*/@changeType='delete'">
    

    【讨论】:

    • 谢谢,蒂姆,我应该意识到这一点。如果我在catalogSeqNumber 上怎么办?可以浓缩:&lt;xsl:if test="@changeType='delete' or preceding-sibling::figure[1]/@changeType='delete'"&gt;
    • 我认为你能做的最好的就是&lt;xsl:if test="(self::*|preceding-sibling::figure[1])/@changeType='delete'"&gt;
    猜你喜欢
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多