求助:使用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
相关产品推荐
相关产品推荐

