【发布时间】:2017-02-08 09:42:24
【问题描述】:
我有一个这样的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>
如您所见,Unicode 字符在 <p> 元素内,在输出中显示为普通文本(在 <p1> 元素内)。但处理指令中的相同 unicode 字符未显示,因为输出中有相关字符(在 <p2> 元素内)。
如何更改我的转换以在元素中显示文本字符串。
expected output,
<doc>
<?PIValue ÒÓÔÕÖØ ÀÁÂÃÄÅ?>
<p1>ÒÓÔÕÖØ ÀÁÂÃÄÅ</p1>
<p2>ÒÓÔÕÖØ ÀÁÂÃÄÅ</p2>
</doc>
【问题讨论】:
-
好问题,但没有简单的解决方案,因为输入中的
p元素内容中的字符引用只是由XML 解析器转换为相应的字符。 pi 内容不会发生这种情况,因为那是字符内容。您具体使用哪种 XSLT 处理器? -
@MartinHonnen,我正在使用 XSLT 2.0