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 回答
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>
于 2013-07-16T16:23:55.067 回答