【发布时间】:2013-04-15 15:59:59
【问题描述】:
我是XSL 的新手。我正在尝试使用 XSL 文件读取 XML 元素的值。我的 XML 文件是这样的:
<PersonList>
<Person>
<Name>person1</Name>
<Age>21</Age>
</Person>
<Person>
<Name>person2</Name>
<Age>21</Age>
</Person>
</PersonList>
我的 XSL 文件是这样的:
<xsl:stylesheet version="1.0" xmlns=...>
<xsl:output method="xml" indent="yes" encoding="utf-8" omit-xml declaration="no" />
<xsl template match="/">
<PersonList>
<xsl:for-each select="PersonList/Person">
<Person>
<xsl:for-each select="*">
<xsl:variable name="elementName">
<xsl:value-of select="name(.)" />
</xsl:variable>
<xsl:variable name="elementValue">
???
</xsl:variable>
</xsl:for-each>
</Person>
</xsl:for-each>
</PersonList>
</xsl:template>
</xsl:stylesheet>
我应该如何替换??? 以获取存储在elementName 变量中的元素的值。我分别尝试了以下三行:
<xsl:value-of select="value(.)" />
<xsl:value-of select="value($elementName)" />
<xsl:value-of select="$elementName" />
但没有运气。请帮忙!
【问题讨论】:
-
考虑发布您希望使用 XSLT 为您发布的 XML 输入示例创建的 XML 结果。很难从您的 XSLT 示例中看出您想要实现什么,因为它存在
xsl template之类的语法错误和空for-each主体之类的逻辑缺陷,或者使用上下文节点是根节点的name(.)。 -
我已经更正了 xsl。请现在考虑。我想在循环中获取 elementValue 变量中的值 Person1、21、Person2、21。
-
您应该真正了解 pull 处理(您正在执行的操作)和 push 样式之间的区别。对于这样的任务,使用模板和应用模板的推送样式更加自然,并且与 XSL 处理器的工作方式相匹配。看起来您只是想将输入复制到输出...在 Google 上搜索“XSL 身份模板”。