这个问题在这里已有答案:
我有一个XML,它可以通过XSLT转换为网页上的Excel工作表。 XML中的元素标记成为Excel中的列标题。有些列想要有空格。我们不喜欢Excel工作表标题中的下划线或连字符。如何在XML标记/元素中包含空格?我尝试使用 
或%20
或#&20;
等(各种语法)但是所有这些都在XML编辑器本身上显示错误,说不允许使用这个十六进制字符。
我的XML是
<ClientArray>
<Client>
<LastName>Aanonsen</LastName>
<FirstName>Fred</FirstName>
<Additional Remarks><Additional Remarks>
</Client>
我希望标签中的Additional
和Remarks
之间有一个空格。请帮忙。提前致谢。
如何在XML标记/元素中包含空格?我试过放或%20或

等。 (所有类型的语法)但所有这些都在xml编辑器本身上显示错误,说不允许使用这个十六进制字符
你不能。 W3C XML specification严格定义了名称的语法。名称只能以字母字符开头(包括下划线),然后下一个字符可以是字母字符或数字或连字符,但空格是分隔符,不允许作为任何名称的一部分。
更准确地说,这里是the exact rules from the spec:
[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
[5] Name ::= NameStartChar (NameChar)*
要克服此限制,您必须修改XSLT转换,以便以Excel列名称输出比XML名称更方便读取字符串。
除了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,' : ',.,'
')"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
有了这个正确的输入:
<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 :)
' : ',.),
'
')