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

如何用单份XSLT 1.0处理含相似标签的两类XML文件

XSLT 1.0 适配两种XML结构提取内容方案

针对你遇到的两种XML仅部分标签名含不同子串的情况,直接用contains()函数匹配标签名即可实现通用提取,以下是可直接使用的XSLT代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" encoding="UTF-8"/>

    <!-- 匹配XML根节点,启动处理流程 -->
    <xsl:template match="/">
        <!-- 定位顶层的responseXXXXcontent或responseYYYYcontent节点 -->
        <xsl:apply-templates select="*[contains(name(), 'XXXX') or contains(name(), 'YYYY')]"/>
    </xsl:template>

    <!-- 处理顶层的可变名称节点 -->
    <xsl:template match="*[contains(name(), 'XXXX') or contains(name(), 'YYYY')]">
        <!-- 利用固定的中间节点路径,定位到finalcontentXXX下的name节点并输出内容 -->
        <xsl:value-of select="contentonedeep/contenttwodeep/*[contains(name(), 'XXXX') or contains(name(), 'YYYY')]/name"/>
    </xsl:template>
</xsl:stylesheet>

关键语法说明

  1. name()函数:用于获取当前节点的标签名,比如对<responseXXXXcontent>节点调用name()会返回字符串responseXXXXcontent。
  2. contains()函数:判断第一个参数的字符串是否包含第二个参数的子串,contains(name(), 'XXXX')即可匹配所有标签名含XXXX的节点。
  3. 路径定位:因为<contentonedeep>和<contenttwodeep>的标签名是固定的,所以可以直接用层级路径定位,无需额外判断。

简化写法(如果确保文档中只有一个<name>节点)

如果你的XML结构里只会有一个<name>节点,也可以用更简洁的路径直接提取:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" encoding="UTF-8"/>

    <xsl:template match="/">
        <xsl:value-of select="//name"/>
    </xsl:template>
</xsl:stylesheet>

这种写法更简单,但如果文档中有多个<name>节点,会输出所有节点的内容,所以优先推荐第一种精准定位的写法。

内容的提问来源于stack exchange,提问作者Damian Szarik Paul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:41:18