使用XSLT从XML源文件提取元素文本的问题
问题解决思路
你的问题出在两个核心点:
- XML里的名字是
givenname(属于subscriber元素的属性),但你写的select="forename"既找错了名称,又没加@前缀——XSL里必须用@来标识要访问的是元素属性,而非子元素。 - 你的XSL代码未闭合
<entry>和<xsl:template>标签,这会导致语法解析错误。
修正后的完整XSL代码
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <output> <xsl:apply-templates select="mailList/subscriber"/> </output> </xsl:template> <xsl:template match="subscriber"> <entry> <firstname> <xsl:value-of select="@givenname"/> </firstname> <lastname> <xsl:value-of select="@familyname"/> </lastname> <email> <xsl:value-of select="@email"/> </email> </entry> </xsl:template> </xsl:stylesheet>
关键说明
@givenname:通过@前缀精准定位subscriber元素的givenname属性,这是你之前缺失的核心语法。- 根模板
match="/":触发整个XML文档的转换逻辑,通过apply-templates遍历所有subscriber节点。 - 闭合所有标签:确保XSL语法合法,避免解析器报错。
用这段代码处理你的XML,会生成如下结构化输出:
<output> <entry> <firstname>Jon</firstname> <lastname>Smith</lastname> <email>js@somewhere.com</email> </entry> <entry> <firstname>Luke</firstname> <lastname>Sky</lastname> <email>sov.com</email> </entry> </output>
内容的提问来源于stack exchange,提问作者Siriana
相关产品推荐
相关产品推荐

