我想知道转换以下XML示例的最简单(也是最友好的资源)方式
<index>
<element_1>
<local xml:lang="en">Something in English</local>
<local xml:lang="bg">Something in Bulgarian</local>
<local xml:lang="cs">Something in Czech</local>
<!-- more locales from here -->
</element_1>
<element_2>
<local xml:lang="en">Something else in English</local>
<local xml:lang="bg">Something else in Bulgarian</local>
<local xml:lang="cs">Something else in Czech</local>
<!-- more locales from here -->
</element_2>
<!-- more elements from here -->
</index>
进入以下XML,以便将其存储在参数
中<index>
<element_1>Something in English</element_1>
<element_2>Something else in English</element_2>
<!-- more elements from here -->
</index>
我知道下面的xslt可以解决问题,但由于我的实际文件比上面的例子更大更复杂,我想知道是否有更简单的方法来实现这一点。因此,例如使用XPath而不是模板。有什么建议吗?
<xsl:param name="indexNode" select="/index"/>
<xsl:param name="language">en</xsl:param>
<xsl:template match="/">
<xsl:for-each select="$indexNode">
<xsl:copy>
<!-- index node -->
<xsl:for-each select="node()">
<!-- element node -->
<xsl:copy>
<!-- locale node -->
<xsl:value-of select="local[lang($language)]"/>
</xsl:copy>
</xsl:for-each>
</xsl:copy>
</xsl:for-each>
</xsl:template>
提前致谢!
答案 0 :(得分:0)
这样做的一种简单方法 - 假设您只想过滤掉英文版
<xsl:template match="/">
<index>
<xsl:for-each select="//local[@xml:lang='en']">
<xsl:element select="local-name(parent::*)"> //Get name of parent and create a node
<xsl:value-of select="."/>
</xsl>
</xsl:for-each>
</index>
</xsl:template>