Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSL到HTML:包含方法的问题_Xml_Xslt - Fatal编程技术网

Xml XSL到HTML:包含方法的问题

Xml XSL到HTML:包含方法的问题,xml,xslt,Xml,Xslt,我有一个非常奇怪的情况。在我的例子中,contains使用一个值,而不使用另一个值。我尝试过XSLT调试(这里没有太多帮助) 情况如下。我有以下XML结构: <RejRow> <Column> <ColumnName>GRP</ColumnName> <ColumnValue>1234w5</ColumnValue> <ValidationType>GRP: Non-Integer Va

我有一个非常奇怪的情况。在我的例子中,contains使用一个值,而不使用另一个值。我尝试过XSLT调试(这里没有太多帮助)

情况如下。我有以下XML结构:

<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名称空间。