我正在使用XSLT将XML转换为HTML。
这是我正在运行的代码
<?xml version="1.0" encoding="UTF-8"?>
<product>
<auto>
<admin>
<date>2015</date>
<age>28</age>
<level>3</level>
<subject>
<id>1</id>
</subject>
</admin>
<report>
<Fname>John</Fname>
<Lname>AA</Lname>
<subject>
<id>1</id>
</subject>
</report>
</auto>
<auto>
<admin>
<date>02/02/2015</date>
<age>29</age>
<level>2</level>
<subject>
<id>1</id>
</subject>
</admin>
<report>
<Fname>Jack</Fname>
<Lname>BB</Lname>
</report>
</auto>
</product>
这是我的Running XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html lang="en">
<head>
<title>Example</title>
<script type="text/javascript">
<![CDATA[
function toggleDisplay(element)
{
element.style.display = element.style.display === 'none' ? '' : 'none';
};
function toggleDisplayAll(elements)
{
for(var i=0; i<elements.length; i++){
toggleDisplay(elements[i]);
}
}
]]>
</script>
</head>
<body>
<h1>Example</h1>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="product/auto">
<ul>
<a onclick="toggleDisplayAll(this.parentNode.getElementsByTagName('ul')); return false;" href="#">
<xsl:value-of select="report/Fname"/>
</a>
<xsl:apply-templates select="admin"/>
<!--<xsl:apply-templates select="report"/>-->
</ul>
</xsl:template>
<xsl:template match="date">
<li style="display:none;">
<xsl:value-of select="concat('Date : ',.)"/>
</li>
</xsl:template>
<xsl:template match="age">
<li style="display:none;">
<xsl:value-of select="concat('Age : ',.)"/>
</li>
</xsl:template>
<xsl:template match="level">
<li style="display:none;">
<xsl:value-of select="concat('Level : ',.)"/>
</li>
</xsl:template>
<xsl:template match="id">
<li style="display:none;">
<xsl:value-of select="concat('ID : ',.)"/>
</li>
</xsl:template>
<xsl:template match="subject">
<li style="display:none;">
<a onclick="toggleDisplayAll(this.parentNode.getElementsByTagName('li')); return false;" href="#">
<xsl:text>Subject: </xsl:text>
</a>
<ul>
<xsl:apply-templates select='*'/>
</ul>
</li>
</xsl:template>
<xsl:template match="admin">
<ul style="display:none;">
<a onclick="toggleDisplayAll(this.parentNode.getElementsByTagName('li')); return false;" href="#">
<xsl:text>Admin: </xsl:text>
</a>
<ul style="display:none;">
<xsl:apply-templates select='*'/>
</ul>
</ul>
</xsl:template>
</xsl:stylesheet>
它正在回归我
John Jack
点击John后
John . Admin: Jack
点击Admin
John . Admin: . Date: 2015 . Age: 28 . Level: 3 . Subject: Jack
但是Subject是一个链接,我想在点击它时将id显示为子元素,如下所示
John . Admin: . Date: 2015 . Age: 28 . Level: 3 . Subject: .Id: 1 Jack
答案 0 :(得分:0)
添加日期,年龄,级别,ID,州和国家/地区的模板。 然后在admin的子项上应用模板并报告而不是value-of。
通过“添加模板”,我的意思是(未经过测试,可能有'错字'):
<xsl:template match="date">
<li><xsl:value-of select="concat('Date : ',.)"/></li>
</xsl:template>
为每个元素添加类似的模板(实际上你可以使用一个可以使用元素名称的通用模板,但在我的回答中试图保持简单)。
然后是管理员模板:
<xsl:template match="admin">
<ul style="display:none;">
<li>
<xsl:text>Admin: </xsl:text>
<xsl:apply-templates select='*'/>
<br/>
</li>
</ul>
</xsl:template>
对报告模板执行相同操作。