2

xmlファイルとhtmlを生成するために作成したxslファイルがあります。私のxmlファイルは次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<expert_questions>
    <question Id="10">
        <source_ip>192.168.150.1</source_ip>
        <port>545</port>
        <packet_size>1400</packet_size>
        <more_details>
            <time>13:42</time>
            <count>100</count>
            <comment>more details</comment>
        </more_details>
    </question>
    <question Id="...">
       .
       .
       .
    </question>
</expert_questions>

と私のxslファイル:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    version="1.0">
        <xsl:output omit-xml-declaration="yes" indent="yes" />
        <xsl:template match="/">
            <xsl:for-each select="expert_questions">
                <table border="1" cellspacing="0" cellpadding="0">
                    <tr class ="table-title">
                        <th class="th">source ip</th>
                        <th class="th">port</th>
                        <th class="th">packet size</th>
                        <th class="th">more details</th>
                    </tr>
                    <xsl:for-each select="question">
                        <tr>
                            <xsl:attribute name="id">
                                <xsl:value-of select="@Id" />
                            </xsl:attribute>

                            <td><xsl:value-of select="source_ip"></xsl:value-of></td> 
                            <td><xsl:value-of select="port"></xsl:value-of></td>
                            <td><xsl:value-of select="packet_size"></xsl:value-of></td>
                            <td>   
                                <xsl:for-each select="more_details">
                                        <xsl:attribute name="title">

                                            <xsl:value-of select="concat('Time: ', time, '&#10;')" />
                                            <xsl:value-of select="concat('Count: ', count)" />
                                            <xsl:value-of select="concat('Comment: ', comment)" />
                                        </xsl:attribute>
                                        <xsl:text>more details</xsl:text>
                                    </a>
                                </xsl:for-each>
                            </td>
                        </tr>
                    </xsl:for-each>
                </table>
            </xsl:for-each>
        </xsl:template>

    </xsl:stylesheet>

xmlの情報が長すぎるため、一部のページに表示されるはずです。

ページ付けを使用する必要があります。検索したところ、これを行うのに役立つこのページXsltページングの例について)が見つかりました。

xmlファイルがなく、何をすべきか完全に理解できません(xslは初めてです)。

umbracoなしでこれを行うことはできますか?

4

1 に答える 1

5

I.これは「ページング」を実装する方法を示す小さな例です

このソースXMLドキュメントを考えると:

<nums>
  <num>01</num>
  <num>02</num>
  <num>03</num>
  <num>04</num>
  <num>05</num>
  <num>06</num>
  <num>07</num>
  <num>08</num>
  <num>09</num>
  <num>10</num>
</nums>

ページサイズがの3場合、このXSLT 1.0変換

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*" name="identity">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="num[position() mod 3 = 1]">
  <page>
    <xsl:apply-templates mode="inGroup"
      select=".|following-sibling::num[not(position()>2)]"/>
  </page>
 </xsl:template>

 <xsl:template match="num"/>

 <xsl:template match="num" mode="inGroup">
  <xsl:call-template name="identity"/>
 </xsl:template>
</xsl:stylesheet>

生成します

<nums>
   <page>
      <num>01</num>
      <num>02</num>
      <num>03</num>
   </page>
   <page>
      <num>04</num>
      <num>05</num>
      <num>06</num>
   </page>
   <page>
      <num>07</num>
      <num>08</num>
      <num>09</num>
   </page>
   <page>
      <num>10</num>
   </page>
</nums>

注意してください

純粋なXSLT1.0を使用するだけでは、1回の変換で複数の結果ドキュメントを生成することはできません。

XSLT 2.0とそのxsl:result-document命令、またはEXSLTの<exsl:document>拡張要素を実装するXSLT1.0プロセッサのいずれかを使用できます。もう1つの方法は、出力ページごとに個別のXSLT1.0変換を開始することです。


II。XSLT2.0を使用したページング

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:param name="pPageSize" select="3"/>

 <xsl:template match="/*">
  <xsl:for-each-group select="num" group-adjacent="position() idiv $pPageSize">
     <xsl:result-document href="file:///c:/temp/delete/page{current-grouping-key()+1}">
      <html>
        <xsl:apply-templates mode="inGroup" select="current-group()"/>
      </html>
     </xsl:result-document>
    </xsl:for-each-group>
 </xsl:template>

 <xsl:template match="num" mode="inGroup">
  <p><xsl:value-of select="."/></p>
 </xsl:template>
</xsl:stylesheet>

この変換が同じXMLドキュメント(上記)に適用された場合。4つの結果ドキュメントが正常に作成されます

そしてSaxon8.7.01はこれを発行します:

Saxon 9.1.0.7J from Saxonica

Java version 1.6.0_17

Stylesheet compilation time: 223 milliseconds

Processing file:/C:\CVS-DDN\fxsl-xslt2\data\numList.xml

Building tree for file:/C:\CVS-DDN\fxsl-xslt2\data\numList.xml using class net.sf.saxon.tinytree.TinyBuilder

Tree built in 2 milliseconds

Tree size: 23 nodes, 20 characters, 0 attributes

Loading net.sf.saxon.event.MessageEmitter

Writing to file:/c:/temp/delete/page1

Writing to file:/c:/temp/delete/page2

Writing to file:/c:/temp/delete/page3

Writing to file:/c:/temp/delete/page4

Execution time: 73 milliseconds

Memory used: 21482856

NamePool contents: 21 entries in 20 chains. 6 prefixes, 7 URIs
于 2012-09-02T16:11:31.720 に答える