1

我有一个包含一些数据的 xml 文件。我想显示数据的“扩展”视图或概览。我设法使用 XSL 显示扩展视图,并且我没有使用 javascript 来隐藏概述的一些内容。

这是我的xml文件:

<BS>
<project>
    <name>project1</name>
    <references id="1">
        <ref>ref1</ref>
        <ref>ref2</ref>
        <ref>ref3</ref>
    </references>

    <references id="2">
        <ref>ref4</ref>
        <ref>ref5</ref>
        <ref>ref6</ref>
    </references>

</project>
<project>
    <name>project2</name>
    <references id="1">
        <ref>ref7</ref>
        <ref>ref8</ref>
        <ref>ref9</ref>
    </references>
</project>
</BS>

和我的 XSL:

<?xml version="1.0" encoding="ISO-8859-1"?>
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">

<head>
<script language="javascript" type="text/javascript">

function HideClass(matchClass)
    {
    var elems = document.getElementsByTagName('*'),i;
    for (i in elems)
        {
        if((elems[i].className).indexOf(matchClass) > -1)
            {
            elems[i].style.display = 'none';
            }
        }
    }

function ShowClass(matchClass)
    {
    var elems = document.getElementsByTagName('*'),i;
    for (i in elems)
        {
        if((elems[i].className).indexOf(matchClass) > -1)
            {
            elems[i].style.display = 'block';
            }
        }
    }

function ShowOverview()
    {
    var elems = document.getElementsByTagName('*'),i;
    for (i in elems)
        {
        if((elems[i].className).indexOf('id1') > -1)
            {
            elems[i].style.display = 'block';
            }
        else
            {
            elems[i].style.display = 'none';
            }
        }
    }
</script>
 </head>        

 <body>

<xsl:for-each select="BS/project">
    <h3><xsl:attribute name="class"><xsl:value-of select="name"/>-id1</xsl:attribute>
        <xsl:value-of select="name"/>
    </h3>


    <xsl:for-each select="references">
        <div><xsl:attribute name="class"><xsl:value-of select="name"/>-id<xsl:value-of select="@id"/></xsl:attribute>

        Status: OK<br/>
        References id: <xsl:value-of select="@id"/>
        <table> 
            <xsl:for-each select="ref">
                <tr><td>
                <xsl:value-of select="text()"/>
                </td></tr> 
            </xsl:for-each> 
        </table>
        </div>
        <br/>
    </xsl:for-each>


    <!-- link Hide-->
    <xsl:element name="a">
    <xsl:attribute name="href">#</xsl:attribute>
    <xsl:attribute name="onclick">HideClass('<xsl:value-of select="name"/>');return false;</xsl:attribute>
    <i><xsl:text>Hide </xsl:text><xsl:value-of select="name"/></i>
    </xsl:element>
    <!-- end of link -->
    <br/>
    <!-- link Show-->
    <xsl:element name="a">
    <xsl:attribute name="href">#</xsl:attribute>
    <xsl:attribute name="onclick">ShowClass('<xsl:value-of select="name"/>');return false;</xsl:attribute>
    <i><xsl:text>Show </xsl:text><xsl:value-of select="name"/></i>
    </xsl:element>
    <!-- end of link -->
    <br/>

</xsl:for-each>
<hr/>
<a href="#" onclick="ShowOverview();return false;"> Show only overview</a>


</body>
</html>

但它不起作用。我想在“加载页面”上显示所有内容(这是有效的!)并在单击“隐藏项目 1”时隐藏项目 1(及其所有内容)。

此外,我想显示“所有项目的概述”:

  • 标题(例如 <h3> 项目 1</h3> )
  • 第一个引用(状态,ref id=1 和包含 ref 的表)

在单击“仅显示概述”时为每个项目。

但是我的 XSL 只能显示所有内容、隐藏所有内容或仅隐藏标题!??!

您对我如何实现目标有任何想法吗?

谢谢你。

4

0 回答 0