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

求助:使用XSLT提取XML中任意层级的所有FOO标签

提取XML中所有层级的FOO标签(XSLT入门方案)

嘿,刚上手XSLT遇到这个问题太正常了!要抓取XML里任意层级的<FOO>标签,核心就是用XPath的//全局选择器,它能直接跳过层级定位到所有匹配的节点,完全不用手动一层层遍历。

我给你准备了一套完整的入门方案,一看就懂:

步骤1:基础XSLT模板

下面的样式表会精准定位所有<FOO>节点,你可以根据需求自定义输出逻辑:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 默认遍历模板:递归处理所有节点,确保深层的FOO也能被匹配到 -->
    <xsl:template match="@*|node()">
        <xsl:apply-templates select="@*|node()"/>
    </xsl:template>

    <!-- 专门匹配所有<FOO>节点,这里可以自定义输出规则 -->
    <xsl:template match="FOO">
        <!-- 原样输出FOO标签及其内容、属性 -->
        <xsl:copy-of select="."/>
        <!-- 如果只需要提取FOO的文本内容,替换成:<xsl:value-of select="text()"/> -->
    </xsl:template>
</xsl:stylesheet>

步骤2:XML示例测试

假设你的XML文档结构是这样的:

<ROOT>
    <FOO>第一层的FOO</FOO>
    <BAR>
        <FOO>第二层的FOO</FOO>
        <BAZ>
            <FOO>第三层的FOO</FOO>
        </BAZ>
    </BAR>
</ROOT>

用上面的XSLT转换后,输出结果会是:

<FOO>第一层的FOO</FOO>
<FOO>第二层的FOO</FOO>
<FOO>第三层的FOO</FOO>

关键知识点拆解

  • //FOO:这个XPath表达式的作用是「选择文档中所有层级的<FOO>节点」,不管它嵌套在多少层子节点里都能精准抓到。
  • <xsl:copy-of select="."/>:把匹配到的<FOO>节点(包括它的属性、子节点)完整复制输出;如果只需要文本内容,换成<xsl:value-of select="text()"/>即可。
  • 默认遍历模板:这个模板会递归处理所有节点,是确保深层<FOO>不被遗漏的关键——要是没有它,XSLT只会处理根节点的直接子节点,深层内容就抓不到了。

如果还有进阶需求,比如只提取带特定属性的<FOO>(比如<FOO id="target">),只要把匹配规则改成match="FOO[@id='target']"就行,灵活性拉满!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:34:30