2

わかりました、私はここからいくつかの簡単なチュートリアルを行っています:

http://www.cch.kcl.ac.uk/legacy/teaching/7aavdh06/xslt/html/module_06.html

最初の演習では、特定の出力を生成する変換を作成します。残念ながら、私は近くにいますが、最初は不要な要素を取得します。すなわち

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

  <xsl:output method="xhtml"
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" />

  <xsl:template match="/div/placeName">
    <html>
      <head />
      <body>
        <Table>
          <tr>
            <td>Place Name</td>
            <td>
              <xsl:value-of select="name" />
            </td>
          </tr>
          <tr>
            <td>Place Name (regularised)</td>
            <td>
              <xsl:value-of select="@reg" />
            </td>
          </tr>
          <tr>
            <td>National Grid Reference</td>
            <td>
              <xsl:value-of select="@key" />
            </td>
          </tr>
          <tr>
            <td>Type of building/monument</td>
            <td>
              <xsl:value-of select="settlement/@type" />
            </td>
          </tr>
        </Table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

しかし、私が得ている出力は次のとおりです。

Location
Place Name  Old Warden
Place Name (regularised)    Old Warden, St Leonard
National Grid Reference TL 137 443
Type of building/monument   Parish church

残りは問題ありませんが、「場所」は不要です。ソースXMLは上記のリンクにあります。不要なテキストの表示を停止する方法はありますか?または、さらに良いことに、どこが間違っているのか教えてください!:)

編集:これが出力です

<?xml version="1.0" encoding="utf-8" ?>
Location
<!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<body>
    <table>
        <tr>
            <td>Place Name</td>
            <td>Old Warden</td>
        </tr>
        <tr>
            <td>Place Name (regularised)</td>
            <td>Old Warden,  St Leonard</td>
        </tr>
        <tr>
            <td>National Grid Reference</td>
            <td>TL 137 443</td>
        </tr>
        <tr>
            <td>Type of building/monument</td>
            <td>Parish church</td>
        </tr>
    </table>
</body>
</html>
4

3 に答える 3

2

Stivelが言及しているように、「場所」のテキストはXMLのhead要素から取得されます。

<div type="location">
    <head n="I">Location</head>
    <placeName reg="Old Warden,  St Leonard" key="TL 137 443">

表示される理由は、XSLTで探している要素に一致するものを指定しない場合に使用するXSTLの組み込みテンプレートが原因です。

W3Cページで組み込みのテンプレートを確認できますが、要するに、XSLTが一致するものを見つけられない場合は、要素の子を処理し続けるか(要素をコピーせずに)、テキストまたは属性の場合は出力します。値。

XSLTは、最初にドキュメント要素に一致するものを探すことから始めます。テンプレートを提供していない場合は、ルート要素、次にその子などのテンプレートを探し続けます。

あなたの場合、/ div / placeNameまで何にも一致するテンプレートを提供していません。これは、XSLTがdiv要素に組み込みのテンプレートを使用することを意味します。これには2人の子供がいます。地名placeNameに使用できるテンプレートがありますが、headには使用できません。そのため、他に何も指示していないため、組み込みのテンプレートはheadのテキストを出力することになります。

解決策は、単にテンプレートを追加して、head要素を無視することです。

<xsl:template match="/div/head" />

これが完全なXSLTです

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

  <xsl:output method="xhtml"
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" indent="yes" />

  <xsl:template match="/div/head" />

  <xsl:template match="/div/placeName">
    <html>
      <head />
      <body>
        <Table>
          <tr>
            <td>Place Name</td>
            <td>
              <xsl:value-of select="name" />
            </td>
          </tr>
          <tr>
            <td>Place Name (regularised)</td>
            <td>
              <xsl:value-of select="@reg" />
            </td>
          </tr>
          <tr>
            <td>National Grid Reference</td>
            <td>
              <xsl:value-of select="@key" />
            </td>
          </tr>
          <tr>
            <td>Type of building/monument</td>
            <td>
              <xsl:value-of select="settlement/@type" />
            </td>
          </tr>
        </Table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

これを使用すると、必要な出力が得られます。

于 2012-10-29T14:08:51.713 に答える
0

おそらくあなた<head/>が参照するかもしれません

<head n="I">Location</head>

xslで削除<head/>し、それを確認します。

于 2012-10-29T13:46:13.563 に答える
0
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xhtml" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl:template match="div">
<xsl:apply-templates select="placeName"/>
</xsl:template>
  <xsl:template match="placeName">
    <html>
      <head />
      <body>
        <Table>
          <tr>
            <td>Place Name</td>
            <td>
              <xsl:value-of select="name" />
            </td>
          </tr>
          <tr>
            <td>Place Name (regularised)</td>
            <td>
              <xsl:value-of select="@reg" />
            </td>
          </tr>
          <tr>
            <td>National Grid Reference</td>
            <td>
              <xsl:value-of select="@key" />
            </td>
          </tr>
          <tr>
            <td>Type of building/monument</td>
            <td>
              <xsl:value-of select="settlement/@type" />
            </td>
          </tr>
        </Table>
      </body>
    </html>
  </xsl:template>
于 2012-10-29T14:05:41.863 に答える