0

私は XSLT を初めて使用します。XML ファイルがあり、xslt を使用して xml ファイル内の情報をテーブルに表示したいと考えています。しかし、次のように情報を連続して表示できます。

apfel 8.97 Fa. Krause Kirschen 10.45 Fa. Helbig apfel 12.67 Fa. Liebig これは私のXMLファイルです:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="/First.xsl"?>
<lieferungen xmlns="urn:myspace:lieferungen"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:myspace:lieferungen ....">
  <artikel id="3526">
    <name>apfel</name>
    <preis stueckpreis="true">8.97</preis>
    <lieferant>Fa. Krause</lieferant>
  </artikel>
  <artikel id="7866">
    <name>Kirschen</name>
    <preis stueckpreis="false">10.45</preis>
    <lieferant>Fa. Helbig</lieferant>
  </artikel>
</lieferungen>

ここに私のXSLTがあります:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
  <xsl:template match="/">
    <html>
      <h1>The First XSLT in diesem Jahr</h1>
      <table>
        <tr>
          <td>Name</td>
          <td>Artikel</td>
          <td>Preis</td>
          <td>Liferant</td>
        </tr>
        <xsl:for-each select="artikel">
          <tr>
            <td>
              <xsl:value-of select="name"/>
            </td>
            <td>
              <xsl:value-of select="preis"/>
            </td>
            <td>
              <xsl:value-of select="lieferant"/>
            </td>
          </tr>
        </xsl:for-each>
      </table>
    </html>
  </xsl:template>
</xsl:stylesheet>
4

2 に答える 2

1

別の解決策を提案します (hr_117 がより良い解決策を提供したと思われる場合も)。とにかく、これがお役に立てば幸いです。

XML

<?xml version="1.0"?>
<lieferungen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:myspace:lieferungen ....">
   <artikel id="3526">
       <name>apfel</name>
       <preis stueckpreis="true">8.97</preis>
       <lieferant>Fa. Krause</lieferant>
   </artikel>
   <artikel id="7866">
        <name>Kirschen</name>
        <preis stueckpreis="false">10.45</preis>
        <lieferant>Fa. Helbig</lieferant>
   </artikel>
</lieferungen>

XML で、デフォルトの名前空間を削除しました。そして今、XSL:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"> 
<xsl:template match="/">
<html>
  <h1>The First XSLT in diesem Jahr</h1>
  <table border="1">
    <tr>
      <td>Name</td>
      <td>Artikel</td>
      <td>Preis</td>
      <td>Liferant</td>
    </tr>
    <xsl:for-each select="//lieferungen/artikel">
        <tr><xsl:apply-templates select="name"/>
            <td><xsl:value-of select="@id"/></td>
            <xsl:apply-templates select="preis|lieferant"/>
        </tr>
    </xsl:for-each>
  </table>
</html>
</xsl:template>

 <xsl:template match="name">
   <td><xsl:value-of select="node()"/></td>
 </xsl:template>

 <xsl:template match="preis">
    <td><xsl:value-of select="node()"/></td>
 </xsl:template>

 <xsl:template match="lieferant">
    <td><xsl:value-of select="node()"/></td>
 </xsl:template>

</xsl:stylesheet>

これにより、次の html が生成されます。

<html>
    <h1>The First XSLT in diesem Jahr</h1>
    <table border="1">
       <tr>
           <td>Name</td>
           <td>Artikel</td>
           <td>Preis</td>
           <td>Liferant</td>
      </tr>
      <tr>
           <td>apfel</td>
           <td>3526</td>
           <td>8.97</td>
           <td>Fa. Krause</td>
      </tr>
      <tr>
           <td>Kirschen</td> 
           <td>7866</td>
           <td>10.45</td>
           <td>Fa. Helbig</td>
      </tr>
   </table>
</html>
于 2013-07-16T21:09:58.493 に答える