XSLT 1.0:[not(./@ id =前面的:: a / @ id)]过滤器两次显示第一个元素

罗斯勒

我似乎犯了一些简单/愚蠢的错误。

给定以下(简化的)xml:

<xml>
  <a id="0" />
  <a id="0" />
  <a id="0" />
  <a id="2" />
  <a id="2" />
</xml>

并给出以下(简化的)xslt:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="xml">
  <xsl:for-each select="//a[not(./@id = preceding::a/@id)]">
    id=<xsl:value-of select="@id" />
  </xsl:for-each>
</xsl:template>

这给了我以下输出:

<?xml version="1.0" encoding="UTF-8"?>
id=0
id=0
id=2

可以看到,with元素id=0被处理了两次,尽管应该只处理一次。在XML输入中,它出现3次,并且该问题仅出现在第一个元素上(因为with元素id=2仅被正确处理了一次)。

请注意,由于原始XML更复杂,因此我需要使用前置过滤器(而不是前置兄弟)。我还需要使用XSLT 1.0,因为我使用Xalan 2.7.1作为Xslt处理器。

罗斯勒

多亏了有用的评论,我得以验证这是XSLT处理器的问题。在使用jdk1.7.0_67系统属性javax.xml.transform.TransformerFactory=null(因此使用平台默认值)的Mac上(请参阅API doc),这将导致上述错误输出。

换句话说,真正的问题是我未能按照问题中的说明将Xalan设置为Xslt处理器。谢谢您的帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果 id 与给定的过滤器 XSLT 1 匹配,则将父 id 属性移动到它的第一个孩子

返回带有 id 前面的 JSON

c#TrimEnd -1删除重复的最后一个字符和前面的字符

无法从 xslt 获取 //account[1] 的第一个出现元素

MySQL 根据找到的 ID 返回 1 或 0

使用SHA-1对Java和C#中的ID进行加密时,C#有时会返回值,并且前面加一个0

子元素列表前面的unshift元素

Javascript检测元素前面的元素

Selenium与Python:如何单击前面的元素

js 在循环中重写前面的元素

显示带有前面的“ +”号的数字

熊猫如何根据后面的行过滤前面的行

熊猫。将 n 个后面的行值“转换”为前面的行值的最佳方法是什么?(乘以 column-1)

删除06、07等数字前面的0

如何从数字 10 及以上删除前面的“0”?

删除当前行和前面的 n-1 行

验证XSLT中的id属性

xslt @id产品与出价的关系

ID搜索并替换为XSLT

jQuery设置唯一ID值从1而不是0递增

ActiveMQ中一个topic前面的复合队列

使用多个前面的行计算一个值

XSLT:如何计算前面的兄弟节点,不包括某些节点类型?

为什么“ SELECT ... WHERE id = 1 = 0”返回除id = 1以外的所有行?

在update_or_create前面的两个变量

XSLT元素到另一个具有ID的元素

DataFrame对象是否可以根据单行条件以及前面的行来获取行?就像'grep -B1 ...'在Linux上一样

In 0:(b - 1) :数值表达式有 6 个元素:仅第一个使用

内容不在内容HTML后面的元素前面