1

XSLT の学習を始めたばかりで、書式設定を一元化しようとするまではすべて正常に機能していました。

これは私の問題です:

XML

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>

<document>

<code>code</code>

<code>2<exp>3</exp></code>

<text>
This is a <special>special</special> word. 2<exp>3</exp>
</text>

</document>

XSLT

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" indent="yes" doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" doctype-public="-//W3C//DTD XHTML 1.1//EN" encoding="utf-8"/>

<xsl:template name="times">·</xsl:template>

<xsl:template name="pow">
  <xsl:param name="exponent"/>
  <xsl:element name="sup"><xsl:value-of select="$exponent"/></xsl:element>
</xsl:template>

<xsl:template match="exp">
  <xsl:call-template name="times"/>
  <xsl:text>10</xsl:text>
  <xsl:call-template name="pow">
    <xsl:with-param name="exponent"><xsl:apply-templates/></xsl:with-param>
  </xsl:call-template>
</xsl:template>

<xsl:template name="codeword">
  <xsl:param name="word"/>
  <xsl:element name="tt">
    <xsl:value-of select="$word"/>
  </xsl:element>
</xsl:template>

<xsl:template match="special">
  <xsl:call-template name="codeword">
    <xsl:with-param name="word"><xsl:apply-templates/></xsl:with-param>
  </xsl:call-template>
</xsl:template>

<xsl:template match="document">
  <xsl:element name="html">
    <xsl:attribute name="xmlns">http://www.w3.org/1999/xhtml</xsl:attribute>
    <xsl:element name="head">
      <xsl:element name="title"><xsl:text>Title</xsl:text></xsl:element>
    </xsl:element>
    <xsl:element name="body">

      <xsl:apply-templates select="code"/>

      <xsl:apply-templates select="text"/>

    </xsl:element>
  </xsl:element>
</xsl:template>

<xsl:template match="code">
  <xsl:element name="div">
    <xsl:text>(</xsl:text>
    <xsl:call-template name="codeword">
      <xsl:with-param name="word"><xsl:apply-templates/></xsl:with-param>
    </xsl:call-template>
    <xsl:text>)</xsl:text>
  </xsl:element>
</xsl:template>

<xsl:template match="text">
  <xsl:element name="p">
    <xsl:apply-templates/>
  </xsl:element>
</xsl:template>

</xsl:stylesheet>

XHTML (xsltproc を使用)

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Title</title>
  </head>
  <body>
    <div>(<tt>code</tt>)</div>
    <div>(<tt>2·103</tt>)</div>
    <p>
This is a <tt>special</tt> word. 2·10<sup>3</sup>
</p>
  </body>
</html>

そのため、ソース XML の<code>とタグの両方をXHTMLに変換しようとしています。しかし、コンテンツにさらにタグを追加すると (この場合のように、「exp」および「pow」テンプレートを介して)、それらは追加時にドロップされます(行のように、これは である必要があります)。<special><tt><sup><tt><tt>2·103</tt><tt>2·10<sup>3</sup></tt>

私は何を間違っていますか?

4

1 に答える 1

2

いつものように、私は質問をするとすぐに答えを見つけます (そして、答えを見つけようとする前にしばらく時間を費やしていました)。答えはここにあります。パラメーターを使用するときのcopy-of代わりに使用する必要value-ofがあります。

于 2012-07-19T18:27:45.797 に答える