0

xsltproc を使用して xml ファイルを変換し、その一部のみを抽出したいのですが、次のような xslt があります。

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output
       method="xml"
       indent="yes"
       encoding="iso-8859-1" />

    <xsl:template match="glossary">
        <ul>
        <xsl:for-each select="*/glossentry">
            <li>
                <h2><xsl:value-of select="glossterm"/> (<xsl:value-of select="abbrev/emphasis"/>)</h2>
                <div><xsl:value-of select="*/para"/></div>
            </li>
        </xsl:for-each>
        </ul>
    </xsl:template>
    <xsl:template match="/">
        <html>  
        <body>
        <xsl:apply-templates/>
        </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

ただし、xml 内にある他のすべてのテキストはテキストとして表示されます。このようなものだけを表示するには、何を追加または変更する必要がありますか?

<html><body>
<ul>
<li>
  <h2>Term (abbrev)</h2>
  <div>Para</div>
</li>
<li>
  <h2>Term2 (abbrev2)</h2>
  <div>Para2</div>
</li>
...
</ul>
4

1 に答える 1

1

わかりました、見つけました。選択を追加する必要がありますapply-templates

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output
       method="xml"
       indent="yes"
       encoding="iso-8859-1" />

    <xsl:template match="part">
        <xsl:if test="@id = 'lexicon'">
            <xsl:apply-templates select="glossary"/>
        </xsl:if>
    </xsl:template>

    <xsl:template match="glossary">
        <ul>
        <xsl:for-each select="*/glossentry">
            <li>
                <h2><xsl:value-of select="glossterm"/> 
                    <xsl:if test="abbrev">
                      <xsl:text>: </xsl:text>
                      <xsl:for-each select="abbrev/*">
                        <xsl:if test="position() &gt; 1">, </xsl:if>
                        <xsl:apply-templates select="."/>
                      </xsl:for-each>
                    </xsl:if>
                </h2>
                <div><xsl:value-of select="*/para"/></div>
            </li>
        </xsl:for-each>
        </ul>
    </xsl:template>
    <xsl:template match="book">
        <html>
            <title><xsl:value-of select="title"/></title>
        <body>
        <xsl:apply-templates select="part"/>
        </body>
        </html>
    </xsl:template>
</xsl:stylesheet>
于 2012-09-16T19:02:25.163 に答える