Xml 在xslt 1.0中,即使元素为空,也要用前导空格填充字符串值
我有两个类似的元素:Xml 在xslt 1.0中,即使元素为空,也要用前导空格填充字符串值,xml,xslt-1.0,padding,fixed-width,msxml6,Xml,Xslt 1.0,Padding,Fixed Width,Msxml6,我有两个类似的元素: <PhoneNumber>0870 6071352</PhoneNumber> <FaxNumber>01722 422301</FaxNumber> 08706071352 01722 422301 在输出(固定宽度文本)中,这两个字符都需要填充前导空格,长度为71个字符 所以我试着: <xsl:value-of select="substring(concat('
<PhoneNumber>0870 6071352</PhoneNumber>
<FaxNumber>01722 422301</FaxNumber>
08706071352
01722 422301
在输出(固定宽度文本)中,这两个字符都需要填充前导空格,长度为71个字符
所以我试着:
<xsl:value-of select="substring(concat(' ', msg:ContactDetails/msg:PhoneNumber), string-length(msg:ContactDetails/msg:PhoneNumber) + 1, 71)"/>
<xsl:value-of select="substring(concat(' ', msg:ContactDetails/msg:FaxNumber), string-length(msg:ContactDetails/msg:FaxNumber) + 1, 71)"/>
但是当元素为空时,上面的字符串长度函数返回0,因此我在输出中只得到59个空格,而不是71个
我还尝试:
<xsl:value-of select="substring(concat(' ', msg:ContactDetails/msg:PhoneNumber), 12, 71)"/>
<xsl:value-of select="substring(concat(' ', msg:ContactDetails/msg:FaxNumber), 12, 71)"/>
但是当FaxNumber或Phonenumber元素为空时,也会发生同样的情况
如何更改xsl以处理此类情况?在XSLT术语中,您有两个不同的源(填充元素和空元素),因此不必使用硬编码函数来修复它。您必须以XSLT样式修复它 1) 模板-如果您不仅有两个变体,而且有许多具有不同约束的变体,那么这非常有用 a) 使用
b) 还有两个不同的模板
和类似的
——第二个模板将获得更高的优先级
2) 老好朋友
和
-如果空虚是唯一的问题,这是很有用的[当我在搜索中偶然发现这篇老帖子时,没有明确的答案,回答它]
在第一个示例中,只有当元素为空时,这才有效。当长度>0时,将减少提取的字符数。如果字段的长度为12,则只能从12到71或59个字符进行拉取
在第二个示例中,您添加了71个空格,但您的子字符串仅从char 12到71提取。71-12 = 59. 同样,你只能得到59个字符
这可能是您想要的:
<xsl:value-of select="substring(concat(' ', msg:ContactDetails/msg:PhoneNumber), string-length(msg:ContactDetails/msg:PhoneNumber) + 1)"/>
不同之处在于省去了子字符串上的最后一个参数,这样就可以拉到最后一个字符,不仅仅是字符71。如果从'020 123 45678'中删除前导和尾随空格,然后即使元素为空也输出71个字符的结果呢?在提出解决方案之前,最好先看看是否可以重现问题。我有,所有这些都没问题,因为提问者的代码有错误,请参见下面检查你的房屋。没有理由认为公式不能处理空字符串。示例中有一些错误(可能也在代码中)