我有一个像这样的xml,
<doc>
<?PIValue ÒÓÔÕÖØ ÀÁÂÃÄÅ?>
<p>ÒÓÔÕÖØ ÀÁÂÃÄÅ</p>
</doc>
我对此XML进行了XSLT转换,如下所示,
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="doc">
<doc>
<xsl:apply-templates/>
<p2><xsl:value-of select="processing-instruction('PIValue')"/></p2>
</doc>
</xsl:template>
<xsl:template match="p">
<p1>
<xsl:apply-templates/>
</p1>
</xsl:template>
上面的输出改变了这个,
<doc>
<?PIValue ÒÓÔÕÖØ ÀÁÂÃÄÅ?>
<p1>ÒÓÔÕÖØ ÀÁÂÃÄÅ</p1>
<p2>&#x00D2;&#x00D3;&#x00D4;&#x00D5;&#x00D6;&#x00D8; &#x00C0;&#x00C1;&#x00C2;&#x00C3;&#x00C4;&#x00C5;</p2>
</doc>
正如您所见,<p>
元素内的unicode字符在输出中显示为普通文本(在<p1>
元素内)。但是处理指令中的相同unicode字符没有显示为输出中的相关字符(<p2>
元素内)。
如何更改变换以在元素中显示文本字符串。
expected output,
<doc>
<?PIValue ÒÓÔÕÖØ ÀÁÂÃÄÅ?>
<p1>ÒÓÔÕÖØ ÀÁÂÃÄÅ</p1>
<p2>ÒÓÔÕÖØ ÀÁÂÃÄÅ</p2>
</doc>
答案 0 :(得分:3)
在XML中,字符引用(如Ò
)在元素和属性内容中被识别,但在处理指令或注释中不被识别。因此,在处理指令中,字符串Ò
只是一个包含8个字符的字符串,而不是对单个字符xD2的引用。
如果你想将Ò
字符串解释为字符引用,那么你可以将它们提交给XML解析器(如Martin Honnen建议的那样),或者你可以解析它们&#34;手工和#34 ;在你自己的代码中。它并不困难:xsl:analyze-string
将提取'00D2'
部分,编写递归函数将十六进制转换为整数是相当简单的,然后最后一部分是调用codepoints-to-string将整数代码转换为字符(=长度为1的字符串)。
答案 1 :(得分:-1)
如果您可以切换到XSLT 3.0,则可以使用
@org.springframework.boot.autoconfigure.domain.EntityScan