gpt4 book ai didi

xslt - 使用 XSLT 时如何保留转义字符值?

转载 作者:行者123 更新时间:2023-12-05 01:25:25 28 4
gpt4 key购买 nike

我正在使用 XSLT 从文件中的某些节点中删除不必要的属性。不应转换的节点使用以下简单模板:

<!-- Copy everything else over -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>

但是,我发现某些节点正在丢失其属性值中包含的转义字符。

例如,这个输入:

<field value="Lei Complementar No. 116/2003, Art. 6, &#167; 2&#186;, I."/>

最终看起来像这样:

<field value="Lei Complementar No. 116/2003, Art. 6, § 2º, I."/>

如何防止这种不需要的转换?

最佳答案

我。 XSLT 1.0 解决方案:

只需将此属性添加到xsl:output :

encoding="us-ascii"

这会导致任何非 ascii 字符使用其字符代码呈现。

但是,您仍然可能得到不同的输出,例如:

<field value="Lei Complementar No. 116/2003, Art. 6, &#167; 2&#186;, I."/>

<field value="Lei Complementar No. 116/2003, Art. 6, &#xA7; 2&#xBA;, I." />

当然,所有这三个都只是同一串 (unicode) 字符的不同表示。

二。 XSLT 2.0 解决方案:

这使用了 <xsl:character-map>指令并且必须始终产生相同的输出:

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes"
indent="yes" use-character-maps="chmEscapes"/>

<xsl:character-map name="chmEscapes">
<xsl:output-character character="&#167;"
string="&amp;#167"/>
<xsl:output-character character="&#186;"
string="&amp;#186"/>
</xsl:character-map>

<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档时:

<field value="Lei Complementar No. 116/2003, Art. 6, &#167; 2&#186;, I."/>

产生了想要的、正确的结果:

<field value="Lei Complementar No. 116/2003, Art. 6, &#167 2&#186, I."/>

关于xslt - 使用 XSLT 时如何保留转义字符值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9438921/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com