如果没有设置默认值,XSLT 1.0 中全局参数的值是多少?
What is the value of a global param in XSLT 1.0 if no default is set?
我们有一个 java Web 应用程序,其中包含 XSLT 1.0 (Saxon 9.6 he) 作为其处理的一部分。在 XML 转换发生之前,Java 代码在根标签下它自己的标签中用一些额外信息填充输入 XML。所以像这样:
<root>
<mainContentToProcess/>
<extraInfo>
<color>Black</color>
</extraInfo>
</root>
在 XSL 文件中,我们在全局参数中获取该信息,如下所示:
<xsl:param name="color" select="//extraInfo/color/text()"/>
问题是,有时Java代码中可能没有输入此节点,或者值为空字符串或null。
假设我们在 java 中将颜色的值设置为空字符串。在 XSL 代码中,我打印出以下内容:
$color: ''
not($color): 'true' //expected false
not($color = ''): true //expected false
$color= '': false // expected true
$color!= '': false
我不知道如何检测它是否为空字符串。我错过了什么吗?上面的值不是我所期望的。谢谢!
Java代码:
element = doc.createElement(elementName);
element.appendChild(doc.createTextNode(elementContent));
parent.appendChild(element);
其中 elementContent 为空字符串。
XPath 表达式//extraInfo/color/text()
选择一个文本节点序列,如果没有选择节点,该序列可以是一个空序列,在这种情况下 not($color)
为真,因为空序列的布尔值节点数是 false
和否定 true
。
当您说 "print out" 值时,我假设您使用的是 xsl:value-of,它将提供的值转换为字符串。现在如果 $color 是一个空序列,当路径表达式没有选择任何内容时似乎就是这种情况,那么
$颜色:''
- 是的,string(())
是 ''
不是($color):'true'
- 是的,boolean(())
为假,not(())
为真。
不是($color = ''):是的
- 是的,(() = X)
总是假的(甚至 () = ()
也是假的)
$color='': 假
- 是的,见上文
$color!= '': 错误
- 是的,() != X
总是 false
请记住 = 和 != 是存在性运算符:如果 A 中有某项 a 且 B 中有某项 b 使得 a~b
为真,则 A~B
为真。如果任一序列为空,则不存在关系成立的项目对,因此比较始终为假,给出明显的悖论,如果 AUTHOR 不存在,则 AUTHOR='Kay'
和 AUTHOR!='Kay'
都是false(结果与 SQL 三值逻辑非常相似,尽管以不同的方式得出)。
我们有一个 java Web 应用程序,其中包含 XSLT 1.0 (Saxon 9.6 he) 作为其处理的一部分。在 XML 转换发生之前,Java 代码在根标签下它自己的标签中用一些额外信息填充输入 XML。所以像这样:
<root>
<mainContentToProcess/>
<extraInfo>
<color>Black</color>
</extraInfo>
</root>
在 XSL 文件中,我们在全局参数中获取该信息,如下所示:
<xsl:param name="color" select="//extraInfo/color/text()"/>
问题是,有时Java代码中可能没有输入此节点,或者值为空字符串或null。
假设我们在 java 中将颜色的值设置为空字符串。在 XSL 代码中,我打印出以下内容:
$color: ''
not($color): 'true' //expected false
not($color = ''): true //expected false
$color= '': false // expected true
$color!= '': false
我不知道如何检测它是否为空字符串。我错过了什么吗?上面的值不是我所期望的。谢谢!
Java代码:
element = doc.createElement(elementName);
element.appendChild(doc.createTextNode(elementContent));
parent.appendChild(element);
其中 elementContent 为空字符串。
XPath 表达式//extraInfo/color/text()
选择一个文本节点序列,如果没有选择节点,该序列可以是一个空序列,在这种情况下 not($color)
为真,因为空序列的布尔值节点数是 false
和否定 true
。
当您说 "print out" 值时,我假设您使用的是 xsl:value-of,它将提供的值转换为字符串。现在如果 $color 是一个空序列,当路径表达式没有选择任何内容时似乎就是这种情况,那么
$颜色:''
- 是的,string(())
是 ''
不是($color):'true'
- 是的,boolean(())
为假,not(())
为真。
不是($color = ''):是的
- 是的,(() = X)
总是假的(甚至 () = ()
也是假的)
$color='': 假 - 是的,见上文
$color!= '': 错误
- 是的,() != X
总是 false
请记住 = 和 != 是存在性运算符:如果 A 中有某项 a 且 B 中有某项 b 使得 a~b
为真,则 A~B
为真。如果任一序列为空,则不存在关系成立的项目对,因此比较始终为假,给出明显的悖论,如果 AUTHOR 不存在,则 AUTHOR='Kay'
和 AUTHOR!='Kay'
都是false(结果与 SQL 三值逻辑非常相似,尽管以不同的方式得出)。