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 回答