Как включить пространство в XML тег / элемент? Я пробовал ставить либо% 20, либо
& # 20;
и т. Д. (все виды синтаксиса), но все они показывают ошибку в xml сам редактор говорит это шестнадцатеричное символ недопустим
Вы не можете . Спецификация W3C XML строго определяет синтаксис имен. Имя может начинаться только с буквенного символа (включая подчеркивание), тогда следующие символы могут быть буквенными символами, цифрами или дефисом, но пробел является разделителем и не может быть частью какого-либо имени.
Точнее , вот точные правила из спецификации :
[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
[5] Name ::= NameStartChar (NameChar)*
Чтобы преодолеть это ограничение, вам нужно изменить преобразование XSLT , чтобы оно выводило в виде имен столбцов Excel больше удобнее читать строки, чем имена XML.
Помимо точного ответа Димитра, вы можете использовать некоторый шаблон, как в этой таблице стилей:
<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 :)
' : ',.),
'
')