xslt - 通过 XPath 提取元素节点的值?
问题描述
源 XML:
<data> <item> <values> <element1> <language>EN</language> <text>text</text> </element1> <element2> <language>DE</language> <text>Text</text> </element2> </values> </item> <item> <values> <element5> <language>EN</language> <text>description</text> </element5> <element6> <language>DE</language> <text>Beschreibung</text> </element6> </values> </item> </data>
我想获得语言“EN”中的所有元素。首先我有一个循环,我将元素名称保存在一个变量中。在下一步中,我只想获取语言“EN”中的元素。在此步骤的结果中,我只需要具有语言“EN”的元素名称和文本来构建表格。
我试过这个:
<xsl:param name="element" select="'element1'"/>
<xsl:template match="/">
<xsl:if test="data/item/values[local-name()=$element]/language[text()='EN']">
</xsl:if>
</xsl:template>
输出 XSLT 应该是这样的:
<table id="123">
<tgroup cols="2">
<colspec colname="c1" colnum="1" colwidth="1.0*"/>
<colspec colname="c2" colnum="2" colwidth="1.0*"/>
<thead>
<row>
<entry>Name</entry>
<entry>Values</entry>
</row>
</thead>
<tbody>
<row>
<entry>
<ph>element1</ph>
</entry>
<entry>text</entry>
</row>
<row>
<entry>
<ph>element5</ph>
</entry>
<entry>description</entry>
</row>
</tbody>
</tgroup>
</table>
我知道还有其他方法可以解决这个问题。但是对于转换中的其他步骤,重要的是分别测试每个元素。
提前致谢!
解决方案
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common" version="1.0">
<xsl:output indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="/">
<xsl:variable name="ENelements">
<xsl:for-each select="/data/item/values/*[language='EN']">
<element name="{local-name()}"><xsl:value-of select="text" /></element>
</xsl:for-each>
</xsl:variable>
<table id="123">
<tgroup cols="2">
<colspec colname="c1" colnum="1" colwidth="1.0*"/>
<colspec colname="c2" colnum="2" colwidth="1.0*"/>
<thead>
<row>
<entry>Name</entry>
<entry>Values</entry>
</row>
</thead>
<tbody>
<xsl:for-each select="exsl:node-set($ENelements)/*">
<row>
<entry>
<ph><xsl:value-of select="@name" /></ph>
</entry>
<entry><xsl:value-of select="." /></entry>
</row>
</xsl:for-each>
</tbody>
</tgroup>
</table>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- sql-server - 基于局部变量的 SSIS SQL Server 执行计划
- angular - nginx中的Angular 4应用程序无法加载文件
- ios - 结构中的函数 - 没有可访问的初始化程序错误 Swift
- java - SpringBoot:将按钮值解析到控制器
- chatbot - Facebook 聊天机器人不会在 app-review 中回复评论者
- postgresql - 分析在 postgreSQL 中将文件上传到 API 时产生的错误
- gatling - 加特林检查soap响应是否包含节点
- java - 设备进入睡眠模式时服务无法正常工作
- python - 熊猫在 groupby 对象上应用 groupby
- kubernetes - GCE Ingress 未从就绪探测中获取健康检查