You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用XSL筛选含&#x..;编码特殊字符的XML叶元素?

解决方案:筛选包含&#x..;编码特殊字符的XML叶元素

你的问题核心在于:XML解析器读取文件时,会自动将º这类实体编码解码为对应的Unicode特殊字符(比如º对应字符º,ª对应ª)。所以在XSLT中访问节点文本时,你看到的是解码后的字符,而非原文件中的&#x..;字符串,这直接导致之前的匹配逻辑失效。

下面提供最直接的解决方法:

方法:匹配非ASCII字符

由于你的XML采用ASCII编码,所有特殊字符都通过实体表示,解码后这些字符的Unicode码点必然超出ASCII范围(0-127)。因此可以用正则表达式匹配非ASCII字符,精准筛选目标叶元素。

修改后的XSLT代码

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
    <xsl:output omit-xml-declaration="yes"/>
    <xsl:template match="/">
        <xsl:text>The following elements in the input file contain special characters:
</xsl:text>
        <xsl:for-each select="//*[not(*) and matches(., '[^\x00-\x7F]')]">
            <xsl:copy-of select="."/>
            <xsl:text>
</xsl:text>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

代码说明

  • matches(., '[^\x00-\x7F]'):正则表达式匹配所有不在ASCII范围内的字符,正好对应原XML中用&#x..;编码的特殊字符。
  • //*[not(*)]:筛选所有没有子元素的叶节点。

预期输出

运行该XSLT后,会得到你需要的结果:

The following elements in the input file contain special characters:
<element2>Text containing special characters: 1&#xba;-2&#xaa;</element2>

如果必须直接匹配原文件中的&#x字符串,需要修改原XML文件将&转义为&amp;(即把&#xba;改为&amp;#xba;),但这种方式需要改动源文件,实用性较低,因此优先推荐上述方法。

内容的提问来源于stack exchange,提问作者tj86430

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:01:18