如何编写Xpath!=(不相等)表达式,例如(!='attr-2',!='attr-3,!='attr-4等)

时间:2019-11-13 14:08:30

标签: xml xslt xpath

找不到解决非常简单情况的示例。 需要多个Xpath!=属性(不相等)排除表达式的适当模式

所需的草稿代码如下:

    <script>
    function updateImage() {
    obj = document.imagename;
    obj.src = obj.src + "?" + Math.random();
    setTimeout("updateImage()",2000);
    }
    </script>

    <body onload="updateImage();">
    <?php  
    $dirname = "thumbnails/";
    $images = glob($dirname."/*.png");

    foreach($images as $thumbs) {
    echo "<img name=imagename src=".$thumbs."?t=".time().">";
    }
    ?>
    </body>

问题-2:输出相同结果可能是这种表达的另一种方式吗?

2 个答案:

答案 0 :(得分:0)

要复制列表中包含的属性以外的所有属性,使用 identity transform 模板可能会很方便:

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

并添加一个例外:

<xsl:template match="@attr-1 | @attr-2 | @attr-3"/>

隐藏您要忽略的属性。


否则,您需要变得冗长:

<xsl:copy-of select="@*[not(name() ='attr-1' or name() ='attr-2' or name() ='attr-3')]"/>

请注意使用not(a=b)而不是a!=b


在XSLT 2.0中,您可以改为使用except运算符:

<xsl:copy-of select="@* except (@attr-1, @attr-2, @attr-3, @attr-4)"/>

答案 1 :(得分:0)

您的问题的直接答案是not(name() = ('attr-1', 'attr-2', 'attr-3'))。但是,当您按名称有条件地处理事物时,在XSLT中通常有比对name()函数的结果进行字符串比较的更好的方法。