Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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 在xslt 1.0中,即使元素为空,也要用前导空格填充字符串值_Xml_Xslt 1.0_Padding_Fixed Width_Msxml6 - Fatal编程技术网

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个字符的结果呢?在提出解决方案之前,最好先看看是否可以重现问题。我有,所有这些都没问题,因为提问者的代码有错误,请参见下面检查你的房屋。没有理由认为公式不能处理空字符串。示例中有一些错误(可能也在代码中)