我有一个XSLT语句如下:
<xsl:when test="address1 != ' '">
我的传入XML地址节点如下:
<address1/>
节点存在且xsl语句似乎有时会起作用,但它并不总是有效,它会给我不一致的结果。我正在检查address1节点,如果它是空格,那么我检查address2节点,如果它不是空格我将它移动到address1输出字段,如果address1输入是空格。输入地址时我们的客户非常不一致,我们的供应商要求地址1有效。谢谢你的帮助。
答案 0 :(得分:2)
检查字符串的问题是您实际检查元素的所有后代中的文本,因此<foo><bar>test</bar></foo>
将无法通过测试foo = ''
,因为文本test
存在于其中树。
更确定的测试是:
address1[not(text()) and not(*)]
只有在地址元素中既没有文本元素也没有子元素的情况下,它才会通过。
答案 1 :(得分:0)
节点为空。
您正在测试它不是单个空格' '
,如果它是一个空节点,则测试将成功。
要测试节点是否为空,您可以执行以下操作:
<xsl:when test="address1 = ''">
答案 2 :(得分:0)
自闭标签应该没有内容,因此检查''
将是正确的方法。执行'[space]'
意味着标记实际上是<address1>[space]</address1>
,不再是自我关闭。
答案 3 :(得分:0)
你没有告诉我们你的代码,我们可以可靠地告诉你它有什么问题。不要那么沉默寡言!可能存在各种各样的问题,这些问题在一个小小的片段中是不明显的,例如:使用错误的上下文项。
但有一条建议:避免使用“!=”运算符(在您的示例中出现)。通常您需要not(author='')
而不是author!=''
。如果只有一个作者元素,它们的含义相同,但如果没有作者元素或者有多个作者元素,则它们具有不同的含义。如果至少有一个author元素的值不是空字符串,则表达式author!=''
为true;如果没有author元素的值为空字符串,则表达式not(author='')
为true。
答案 4 :(得分:0)
要检查元素的字符串值是非空的还是非空白的,请使用:
string-length(normalize-space(address1)) > 0
标准XPath函数normalize-space
($s)
将字符串$s
作为参数,并返回从$s
生成的另一个字符串,其中删除了所有前导和尾随空白字符,任何一组相邻的临时空格字符都被一个空格字符替换。
这意味着normalize-space()
应用于仅包含空格字符的字符串时的结果为空字符串(string-length()
为0
)。
上面的XPath表达式测试将normalize-space()
函数应用于address1
的字符串值的结果是否具有正(> 0
)长度 - 这意味着字符串值address1
包含至少一个非空白字符。