Xml XSL到HTML:包含方法的问题
我有一个非常奇怪的情况。在我的例子中,contains使用一个值,而不使用另一个值。我尝试过XSLT调试(这里没有太多帮助) 情况如下。我有以下XML结构:Xml XSL到HTML:包含方法的问题,xml,xslt,Xml,Xslt,我有一个非常奇怪的情况。在我的例子中,contains使用一个值,而不使用另一个值。我尝试过XSLT调试(这里没有太多帮助) 情况如下。我有以下XML结构: <RejRow> <Column> <ColumnName>GRP</ColumnName> <ColumnValue>1234w5</ColumnValue> <ValidationType>GRP: Non-Integer Va
<RejRow>
<Column>
<ColumnName>GRP</ColumnName>
<ColumnValue>1234w5</ColumnValue>
<ValidationType>GRP: Non-Integer Value</ValidationType>
</Column>
<ColumnName>TCL</ColumnName>
<ColumnValue>lklk3343//</ColumnValue>
<ValidationType>TCL: Non-Alphanumeric Value</ValidationType>
</Column>
</RejRow>
玻璃钢
1234w5
GRP:非整数值
TCL
LK3343//
TCL:非字母数字值
我对每个调用有两个,一个有效,另一个无效。。。试图调查所有的事情,但仍然不知道为什么它对我不起作用。If适用于非字母数字
这个不起作用:
<xsl:for-each select="RejRow[contains(Column/ValidationType, 'Non-Integer Value')]">
<tr>
<td>test1</td>
</tr>
</xsl:for-each>
测试1
这一个是:
<xsl:for-each select="RejRow[contains(Column/ValidationType, 'Non-Alphanumeric Value')]">
<tr>
<td>test1</td>
</tr>
</xsl:for-each>
测试1
有趣的是,如果我明确指定了整个验证名称,那么每个验证名称都可以:
<xsl:for-each select="RejRow[Column/ValidationType='GRP: Non-Integer Value')]">
<tr>
<td>test1</td>
</tr>
</xsl:for-each>
测试1
您需要使用RejRow[Column[contains(ValidationType,'非整数值')]]
或RejRow[Column/ValidationType[contains(,'非整数值')]
而不是RejRow[contains(Column/ValidationType,'非整数值')]
。由于XSLT 1中有多个列
元素,您的包含的将使用第一个列
元素,而在XSLT 2或XSLT 3中则会出现错误。当您执行包含(NN,value)
且NN是包含多个节点的节点集时,则(a)在XPath 1.0中,忽略NN中除第一个节点以外的所有节点,(b)在XPath2.0中,它抛出一个错误Column/ValidationType
是一个包含2个节点的节点集,因此它看起来像是在使用XPath/XSLT1.0。它在2.0版中被更改,因为太多人落入了这个陷阱:这是向前迈进(或说服您的软件供应商这么做)的另一个原因。非常感谢!它似乎起作用了。你能说得更详细一点吗,为什么它对非阿尔法有效?这只是一个虚拟示例,在实际代码中,我有许多行、许多列和许多ValidationType。因此,我的foreach的目标是找到与特定验证匹配的所有列(不一定是唯一的列,也可能有多个ValidationType)。如果列表中有多个ValidationType,而不仅仅是匹配的ValidationType,它也会起作用吗?第二个建议从RejRow[Column/ValidationType[…]]
开始,应该检查是否至少有一个列至少有一个ValidationType
满足检查。至于你的“工作”在这种情况下,很难区分格式不好的代码段,但正如我试图解释的那样,在XPath/XSLT 1中使用contains(Column/ValidationType
)将按文档顺序选择第一个Column/ValidationType
,并对其执行检查,因此我认为这是否“有效”仅当第一个列/ValidationType
满足条件时,才对某些输入进行检查。您的XML格式不正确;缺少
开始标记。这通常表明所显示的XML不是您实际运行的XML;例如,您可能进行了其他您认为不重要的更改,如Omiting名称空间。