-1

XML ファイルであるため、XSL によって何らかの出力を生成することがわかっています。しかし、見る必要のないコンテンツを非表示にしたり、必要なものを表示したりするために、ナビゲーション ツリーを構築する必要があります。私が探しているツリーは次のようになります。

+VIEW1
+VIEW2

たとえば VIEW2 で「+」のようなものをヒットすると、次のような VIEW2 のコンテンツを取得する必要があります。

 +VIEW1
 -VIEW2
   yy NO
   aa YES
   zz NO
   tt NO

これは、私の XML ファイルと、私が書いた "view.xsl" の一部です。また、stackoverflow からいくつかの例を変更しようとしましたが、正しい解決策を得る方法が見つかりませんでした。

view.xsl

<xsl:stylesheet version="2.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" cdata-section-elements="Cdata" indent="yes"/>
<xsl:template match = "/">
<html >
<head>
<title Localizable_1="True"><xsl:value-of select="DOC/show"/></title>
</head>
<BODY class="BODY">
<H1><xsl:value-of select="DOC/show"/></H1>
<TABLE WIDTH="500px">
<xsl:for-each select="DOC/Entry">
<xsl:call-template name="RULE"/>
</xsl:for-each>
</TABLE>
</BODY>
</html>
</xsl:template>

<xsl:template name="RULE">  
<xsl:choose>
    <xsl:if test="level='ON'"><xsl:value-of select="light"/>YES</xsl:if>
    <xsl:if test="level='OFF'"><xsl:value-of select="light"/>NO</xsl:if>
</xsl:choose>

file.XML

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml:stylesheet type='text/xsl' href='view.xsl'?>
<DOC>
  <show>VIEW1</show>
  <Entry>
    <light>ae</light>
    <level>ON</level>
  </Entry>
  <Entry>
    <light>by</light>
    <level>OFF</level>
  </Entry>
  <Entry>
    <light>ac</light>
    <level>OFF</level>
  </Entry>

  <show>VIEW2</show>
  <Entry>
    <light>yy</light>
    <level>OFF</level>
  </Entry>
  <Entry>
    <light>aa</light>
    <level>ON</level>
  </Entry>
  <Entry>
    <light>zz</light>
    <level>OFF</level>
  </Entry>
  <Entry>
    <light>tt</light>
    <level>OFF</level>
  </Entry>
 </DOC> 

助けてくれてありがとう

4

1 に答える 1

1

これは機能します (tr および td 要素を使用してテーブルを作成しますが、ここから強化できると思います)。次の兄弟に関する役立つリンク

   <xsl:stylesheet version="2.0"
                xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"
                xmlns="http://www.w3.org/1999/xhtml" >

  <xsl:output method="html" cdata-section-elements="Cdata" indent="yes"/>
  <xsl:template match = "/">
    <html >
      <head>
        <title Localizable_1="True">
          <xsl:value-of select="DOC/show"/>
        </title>
        <script src="http://code.jquery.com/jquery-1.9.1.min.js" type="text/javascript">
          <xsl:comment>jq</xsl:comment>
        </script>
        <script src="https://raw.github.com/vakata/jstree/master/dist/jstree.min.js" type="text/javascript">
          <xsl:comment>tree</xsl:comment>
        </script>
      </head>
      <body class="BODY">
        <div class="tree">
        <xsl:apply-templates select="DOC/show" />
        </div>
        <script>
          $('div.tree')
          .jstree({
          core: {}
          })
          .bind("select_node.jstree", function (event, data) {
             alert(data.node.context.id); /*  do clever things here */
          })
          .delegate("a", "click", function (event, data) { event.preventDefault();  });
        </script>
      </body>
    </html>
  </xsl:template>

  <!-- match show elements -->
  <xsl:template match="show">
    <ul class="tree">
      <li>
        <a>
            <xsl:value-of select="."/>
        </a>
        <ul>
          <!-- only select the next Entry element -->
          <xsl:apply-templates select="following-sibling::*[1][self::Entry] "/>
        </ul>
      </li>
    </ul>
  </xsl:template>

  <xsl:template match="Entry">
    <li class="rule">
      <xsl:call-template name="RULE"/> 
    </li>
    <!-- only select the next Entry element -->
    <xsl:apply-templates select="following-sibling::*[1][self::Entry] "/>
  </xsl:template>

  <xsl:template name="RULE">
    <xsl:element name="a">
      <!-- or have a href here -->
      <xsl:attribute name="id">
        <xsl:value-of select="light"/>
      </xsl:attribute>
      <span class="light">
        <xsl:value-of select="light"/>
      </span>
      <span class="level">
      <xsl:choose>
        <xsl:when test="level='ON'">
          <xsl:text>YES</xsl:text>
        </xsl:when>
        <xsl:when test="level='OFF'">
          <xsl:text>NO</xsl:text>
        </xsl:when>
      </xsl:choose>
      </span>
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>
于 2013-05-11T19:27:10.170 に答える