2013-07-16 54 views
0

我是XSLT中的新成员。我有一个XML文件,我想使用xslt将xml文件中的信息显示到表中。但我可以在一排这样的信息:使用xslt在HTML表格中显示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> 

回答

1

有只小问题你XSLT。 最主要的是,你的XML有一个默认命名空间。因此你需要在样式表中添加一个带有前缀的命名空间。例如: xmlns:my="urn:myspace:lieferungen"

比你必须使用新的前缀my任何访问元素窗体默认命名空间。 例如: -

<xsl:for-each select="my:artikel"> 

二:你for-each循环迭代超过ARTIKEL为此,你需要在liefrant元素,使这项工作。您的模板更改为<xsl:template match="/*">

为此试试这个:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:my="urn:myspace:lieferungen" > 
    <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="my:artikel"> 
        <tr> 
         <td> 
          <xsl:value-of select="my:name"/> 
         </td> 
         <td> 
          <xsl:value-of select="my:preis"/> 
         </td> 
         <td> 
          <xsl:value-of select="my:lieferant"/> 
         </td> 
        </tr> 
       </xsl:for-each> 
      </table> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 

这将产生以下输出:

<html xmlns:my="urn:myspace:lieferungen"> 
    <h1>The First XSLT in diesem Jahr</h1> 
    <table> 
    <tr> 
     <td>Name</td> 
     <td>Artikel</td> 
     <td>Preis</td> 
     <td>Liferant</td> 
    </tr> 
    <tr> 
     <td>apfel</td> 
     <td>8.97</td> 
     <td>Fa. Krause</td> 
    </tr> 
    <tr> 
     <td>Kirschen</td> 
     <td>10.45</td> 
     <td>Fa. Helbig</td> 
    </tr> 
    </table> 
</html> 
+0

thnk您的回答,我发现不知我的问题,钍eproblem是'Firs.xsl'文件的路径在xml文件中。如果我把absoulute路径。它有效,但现在我有另一个问题。我只能显示HTML表格而不显示xml文件中的信息 – TangoStar

+0

您是否尝试过xslt形式的答案?它应该工作。 –

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> 

这generatre下面的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> 
+0

thnks buddy,非常好:) – TangoStar