如何在XSLT转换成XML表格的XML标签/元素中包含空格

我有一个XML可以通过XSLT转换成网页上的Excel工作表。 XML中的元素标记成为Excel中的列标题。 有列想要有空间。 我们不喜欢Excel工作表头中的下划线或连字符。 如何将空间合并到XML标记/元素中? 我试过把 %20#&20; (各种语法),但他们都显示在XML编辑器本身的错误,说这个hex字符是不允许的。

我的XML是

 <ClientArray> <Client> <LastName>Aanonsen</LastName> <FirstName>Fred</FirstName> <Additional Remarks><Additional Remarks> </Client> 

我想在标签中的AdditionalRemarks之间Additional一个空格。 请帮忙。 提前致谢。

如何将空间合并到XML标记/元素中? 我尝试了放置或%20或&#20; 等等。 (各种语法),但他们都显示错误在XML编辑器本身说这个hex字符是不允许的

你不能W3C XML规范严格定义了名称的语法。 名字只能以字母开头(包括下划线,下一个字母可以是数字或连字符的字母字符,但空格是分隔符,不能作为任何名字的一部分)。

更确切地说 ,这里是规范的确切规则

 [4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] [5] Name ::= NameStartChar (NameChar)* 

为了克服这个限制,你必须修改你的XSLT转换,以便输出Excell列名比XML名更方便读取string。

除了Dimitre的确切答案之外,你可以像这个样式表一样使用一些模式:

  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text"/> <xsl:template match="Client/*" name="space-capital"> <xsl:param name="pLetters" select="translate(name(),'qwertyuiopasdfghjklzxcvbnm','')"/> <xsl:param name="pString" select="name()"/> <xsl:param name="pOut" select="''"/> <xsl:choose> <xsl:when test="$pString != ''"> <xsl:variable name="vFirst" select="substring($pString,1,1)"/> <xsl:call-template name="space-capital"> <xsl:with-param name="pLetters" select="$pLetters"/> <xsl:with-param name="pString" select="substring($pString,2)"/> <xsl:with-param name="pOut" select="concat($pOut, substring(' ',1,contains($pLetters, $vFirst) and $pOut != ''), $vFirst )"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="concat($pOut,' : ',.,'&#xA;')"/> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet> 

有了这个适当的input:

 <ClientArray> <Client> <LastName>Aanonsen</LastName> <FirstName>Fred</FirstName> <AdditionalRemarks>Something</AdditionalRemarks> </Client> </ClientArray> 

输出:

 Last Name : Aanonsen First Name : Fred Additional Remarks : Something 

在XPath 2.0中:

 string-join(/*/*/*/concat( (: This is the expression you need :) replace(name(), '(\P{Lu})(\p{Lu})', '$1 $2'), (: the rest is just to mimic the result :) ' : ',.), '&#xA;')