【问题标题】:Convert HTML table to CSV using XSLT使用 XSLT 将 HTML 表转换为 CSV
【发布时间】:2017-04-13 01:49:46
【问题描述】:

我有一个具有以下定义的 html 表

    <table>
    <tr> 
        <th>Order ID</th> 
        <th>Item ID</th> 
        <th>Participant ID</th> 
        <th>Status</th> 
        <th>Shipping Provider</th> 
        <th>Tracking Number</th> 
        <th>Shipped Date</th> 
        <th>Shipping Method</th>
    </tr> 
    <tr> 
        <td align="center"> Ch_H907</td> 
        <td align="center"> 907</td> 
        <td align="center"> DXM09902</td> 
        <td align="center"> Shipped</td> 
        <td align="center"> USPS</td> 
        <td align="center"> </td> 
        <td align="center"> 04/03/2017</td> 
        <td align="center"> Standard Ground</td> 
    </tr> 
    <tr> 
        <td align="center"> Ch_H871</td> 
        <td align="center"> 871</td> 
        <td align="center"> DXM09902</td> 
        <td align="center"> Shipped</td> 
        <td align="center"> USPS</td> 
        <td align="center"> </td> 
        <td align="center"> 04/03/2017</td> 
        <td align="center"> Standard Ground</td> 
    </tr> 
</table>

和一个xslt翻译定义如下

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                xmlns:fo="http://www.w3.org/1999/XSL/Format" >
    <xsl:output method="text" omit-xml-declaration="yes" indent="yes"/>
    <xsl:template match="/">
        <xsl:for-each select="//tr">
            <xsl:for-each select="td">
                <xsl:value-of select="concat({.},',')"/>
            </xsl:for-each>
             <xsl:value-of select="concat('&#xA;','')"/>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

我想要的输出应该是每个 &lt;tr&gt; 在单独的行上,但上面的翻译会引发异常 line 9: Required attribute 'select' is missing.

【问题讨论】:

    标签: java xml xslt


    【解决方案1】:

    concat 语句中不需要大括号。

    而不是这样做......

    <xsl:value-of select="concat({.},',')"/>
    

    这样做...

    <xsl:value-of select="concat(.,',')"/>
    

    花括号正确用作Attribute Value Templates

    请注意,您可能需要重新调整代码以避免在每行末尾添加额外的逗号。

        <xsl:for-each select="//tr">
            <xsl:for-each select="td">
                <xsl:if test="position() > 1">,</xsl:if>
                <xsl:value-of select="."/>
            </xsl:for-each>
             <xsl:text>&#xA;</xsl:text>
        </xsl:for-each>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-02
      • 2013-11-07
      • 2017-05-23
      • 2011-10-28
      相关资源
      最近更新 更多