XSLT 中的显示元素和各自的值
Display elements and respective value in XSLT
我是 XSLT 初学者,我的要求是获取 table 格式的元素及其各自的值,我尝试了但没有得到期望,请根据我的要求提出解决方案。
我的输入XML是
<group>
<elementgroup1>
<element1>value1</element1>
<element2/>
<element3>value3</element3>
</elementgroup1>
<elementgroup2>
<elementsubgroup2>
<element4>value4</element4>
<element5>value5</element5>
</elementsubgroup2>
</elementgroup2>
</group>
我的 xslt 是
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="/">
<xsl:element name="table">
<xsl:attribute name="border" select="'1'"/>
<xsl:element name="tr">
<xsl:element name="th">XML Viewer</xsl:element>
</xsl:element>
<xsl:for-each select="/group//*">
<xsl:call-template name="mytemplate"/>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template name="mytemplate">
<xsl:element name="tr">
<xsl:element name="td">
<xsl:value-of select="name()"></xsl:value-of>
</xsl:element>
<xsl:for-each select="child::*">
<xsl:element name="td">
<xsl:value-of select="."></xsl:value-of>
</xsl:element>
</xsl:for-each>
</xsl:element>
/xsl:template>
</xsl:stylesheet>
我需要的输出
<table border="1">
<tr>
<th>
Output
</th>
</tr>
<tr>
<td>
group
</td>
<td/>
</tr>
<tr>
<td>
elementgroup1
</td>
<td/>
</tr>
<tr>
<td>
element1
</td>
<td>
value1
</td>
</tr>
<tr>
<td>
element2
</td>
<td/>
</tr>
<td>
element3
</td>
<td>
value3
</td>
</tr>
</table>
显示输出
输出应该是table格式,请看下面
Output
group
elementgroup1
element1 value1
element2
element3 value3
.
.
.
go on till end
当我理解正确的时候,你需要这样的改造
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="4.0" indent="yes"/>
<xsl:template match="/">
<table>
<xsl:apply-templates select="*"/>
</table>
</xsl:template>
<xsl:template match="*">
<tr>
<td><xsl:value-of select="name()"/></td>
<td><xsl:value-of select="normalize-space(text())"/></td>
</tr>
<xsl:apply-templates select="*"/>
</xsl:template>
</xsl:stylesheet>
生成示例的以下输出 XML
<table>
<tr>
<td>group</td>
<td></td>
</tr>
<tr>
<td>elementgroup1</td>
<td></td>
</tr>
<tr>
<td>element1</td>
<td>value1</td>
</tr>
<tr>
<td>element2</td>
<td></td>
</tr>
<tr>
<td>element3</td>
<td>value3</td>
</tr>
<tr>
<td>elementgroup2</td>
<td></td>
</tr>
<tr>
<td>elementsubgroup2</td>
<td></td>
</tr>
<tr>
<td>element4</td>
<td>value4</td>
</tr>
<tr>
<td>element5</td>
<td>value5</td>
</tr>
</table>
=编辑=
使不包含文本的元素变为粗体(您需要 CSS span-class font-bold
):
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="4.0" indent="yes"/>
<xsl:template match="/">
<table>
<xsl:apply-templates select="*"/>
</table>
</xsl:template>
<xsl:template match="*">
<xsl:variable name="bold">
<xsl:value-of select="'font'"/>
<xsl:if test="not(string-length(normalize-space(text())))">
<xsl:value-of select="'-bold'"/>
</xsl:if>
</xsl:variable>
<tr>
<td><span class="{$bold}"><xsl:value-of select="name()"/></span></td>
<td><xsl:value-of select="normalize-space(text())"/></td>
</tr>
<xsl:apply-templates select="*"/>
</xsl:template>
</xsl:stylesheet>
试试这个
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<xsl:template match="*">
<table>
<xsl:for-each select="*">
<tr>
<td>
<xsl:value-of select="name()"/>
</td>
<td>
<xsl:value-of select="text()"/>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
我是 XSLT 初学者,我的要求是获取 table 格式的元素及其各自的值,我尝试了但没有得到期望,请根据我的要求提出解决方案。
我的输入XML是
<group>
<elementgroup1>
<element1>value1</element1>
<element2/>
<element3>value3</element3>
</elementgroup1>
<elementgroup2>
<elementsubgroup2>
<element4>value4</element4>
<element5>value5</element5>
</elementsubgroup2>
</elementgroup2>
</group>
我的 xslt 是
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="/">
<xsl:element name="table">
<xsl:attribute name="border" select="'1'"/>
<xsl:element name="tr">
<xsl:element name="th">XML Viewer</xsl:element>
</xsl:element>
<xsl:for-each select="/group//*">
<xsl:call-template name="mytemplate"/>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template name="mytemplate">
<xsl:element name="tr">
<xsl:element name="td">
<xsl:value-of select="name()"></xsl:value-of>
</xsl:element>
<xsl:for-each select="child::*">
<xsl:element name="td">
<xsl:value-of select="."></xsl:value-of>
</xsl:element>
</xsl:for-each>
</xsl:element>
/xsl:template>
</xsl:stylesheet>
我需要的输出
<table border="1">
<tr>
<th>
Output
</th>
</tr>
<tr>
<td>
group
</td>
<td/>
</tr>
<tr>
<td>
elementgroup1
</td>
<td/>
</tr>
<tr>
<td>
element1
</td>
<td>
value1
</td>
</tr>
<tr>
<td>
element2
</td>
<td/>
</tr>
<td>
element3
</td>
<td>
value3
</td>
</tr>
</table>
显示输出 输出应该是table格式,请看下面
Output
group
elementgroup1
element1 value1
element2
element3 value3
.
.
.
go on till end
当我理解正确的时候,你需要这样的改造
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="4.0" indent="yes"/>
<xsl:template match="/">
<table>
<xsl:apply-templates select="*"/>
</table>
</xsl:template>
<xsl:template match="*">
<tr>
<td><xsl:value-of select="name()"/></td>
<td><xsl:value-of select="normalize-space(text())"/></td>
</tr>
<xsl:apply-templates select="*"/>
</xsl:template>
</xsl:stylesheet>
生成示例的以下输出 XML
<table>
<tr>
<td>group</td>
<td></td>
</tr>
<tr>
<td>elementgroup1</td>
<td></td>
</tr>
<tr>
<td>element1</td>
<td>value1</td>
</tr>
<tr>
<td>element2</td>
<td></td>
</tr>
<tr>
<td>element3</td>
<td>value3</td>
</tr>
<tr>
<td>elementgroup2</td>
<td></td>
</tr>
<tr>
<td>elementsubgroup2</td>
<td></td>
</tr>
<tr>
<td>element4</td>
<td>value4</td>
</tr>
<tr>
<td>element5</td>
<td>value5</td>
</tr>
</table>
=编辑=
使不包含文本的元素变为粗体(您需要 CSS span-class font-bold
):
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="4.0" indent="yes"/>
<xsl:template match="/">
<table>
<xsl:apply-templates select="*"/>
</table>
</xsl:template>
<xsl:template match="*">
<xsl:variable name="bold">
<xsl:value-of select="'font'"/>
<xsl:if test="not(string-length(normalize-space(text())))">
<xsl:value-of select="'-bold'"/>
</xsl:if>
</xsl:variable>
<tr>
<td><span class="{$bold}"><xsl:value-of select="name()"/></span></td>
<td><xsl:value-of select="normalize-space(text())"/></td>
</tr>
<xsl:apply-templates select="*"/>
</xsl:template>
</xsl:stylesheet>
试试这个
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<xsl:template match="*">
<table>
<xsl:for-each select="*">
<tr>
<td>
<xsl:value-of select="name()"/>
</td>
<td>
<xsl:value-of select="text()"/>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>