为什么我的XSLT简化样式表不起作用?

时间:2015-02-04 16:35:49

标签: xml xslt

我有这样的XML

<books>
  <details ISBN="107887454323" Author="Lynda Green" Price="$56.00" /> 
   ......
</books>

XSL代码如下所示

<table>
        <xsl:for-each select="books/details">       
            <tr class="boldFont">
                <td class="paddingLeft18">
                    <xsl:value-of select="./@ISBN"/>
                </td>                               
                <td>
                    <xsl:value-of select="./@Author"/>
                </td>
                <td>
                    <xsl:value-of select="./@Price"/>
                </td>
            </tr>
        </xsl:for-each>
</table>

价值观不会出现!我在这段代码中缺少什么?

1 个答案:

答案 0 :(得分:2)

如果你想使用simplified stylesheet,Mathias帮助识别......

请务必添加xmlns:xsl="http://www.w3.org/1999/XSL/Transform"命名空间前缀和xsl:version="1.0"声明。

此输入XML:

<?xml version = "1.0" encoding = "utf-8"?>
<books>
  <details ISBN="107887454323" Author="Lynda Green" Price="$56.00" /> 
  <details ISBN="107887454324" Author="John Green" Price="$99.00" /> 
</books>

提供给此XSLT转换:

<?xml version="1.0" encoding="utf-8"?>
<table xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsl:version="1.0">
  <xsl:for-each select="books/details">       
    <tr class="boldFont">
      <td class="paddingLeft18">
        <xsl:value-of select="@ISBN"/>
      </td>                               
      <td>
        <xsl:value-of select="@Author"/>
      </td>
      <td>
        <xsl:value-of select="@Price"/>
      </td>
    </tr>
  </xsl:for-each>
</table>

将产生所需的输出XML:

<?xml version="1.0" encoding="UTF-8"?><table><tr class="boldFont"><td class="paddingLeft18">107887454323</td><td>Lynda Green</td><td>$56.00</td></tr><tr class="boldFont"><td class="paddingLeft18">107887454324</td><td>John Green</td><td>$99.00</td></tr></table>

虽然由于其局限性,您通常不会在这里看到简化的样式表表单,但简化的样式表在输出大量使用spa的情况下非常有用,但需要一些XPath引用来从输入XML文档中提取值。例如,我见过客户更喜欢简化的样式表来生成XSL-FO。