<address1>地址</address1>的值是什么

时间:2011-09-12 20:07:37

标签: xslt

我有一个XSLT语句如下:

<xsl:when test="address1 != ' '">

我的传入XML地址节点如下:

<address1/>

节点存在且xsl语句似乎有时会起作用,但它并不总是有效,它会给我不一致的结果。我正在检查address1节点,如果它是空格,那么我检查address2节点,如果它不是空格我将它移动到address1输出字段,如果address1输入是空格。输入地址时我们的客户非常不一致,我们的供应商要求地址1有效。谢谢你的帮助。

5 个答案:

答案 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包含至少一个非空白字符。