如何删除xslt中的换行符

时间:2015-02-05 16:55:33

标签: xml xslt

我正在使用xsl:copy-of来显示完整的节点,但它会在顶部和底部添加额外的行。

XML

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="test.xsl" ?>
<root>
  <E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent">
    <ApplicationData>
      <TraceData>
        <DataItem>
          <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Information">
            <TraceIdentifier>MessageSent.aspx</TraceIdentifier>
          </TraceRecord>
        </DataItem>
        <DataItem>
          <table>
            <tr>
              <td>This should not be a table</td>
              <td>It must be a text</td>
            </tr>
          </table>
        </DataItem>
      </TraceData>
    </ApplicationData>
  </E2ETraceEvent>
</root>

XSLT

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

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:te="http://schemas.microsoft.com/2004/06/E2ETraceEvent"
                exclude-result-prefixes="te">
  <xsl:output method="html" indent="yes"/>

  <xsl:template match="/">
    <output>
      <html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <body>
          <table>
            <thead>
              <tr>
                <td>Data</td>
              </tr>
            </thead>
            <tbody>
              <xsl:for-each select="//te:E2ETraceEvent">
              <tr>
                <td>
                  <table>
                    <xsl:for-each select=".//te:TraceData//te:DataItem">
                      <tr>
                        <td>
                          <xmp>
                            <xsl:copy-of select="./node()" />
                          </xmp>
                        </td>
                      </tr>
                    </xsl:for-each>
                  </table>
                </td>
              </tr>
              </xsl:for-each>
            </tbody>
          </table>
        </body>
      </html>
    </output>
  </xsl:template>

</xsl:stylesheet>

输出

引号之间的

在实际节点的上方和下方有空格和空行

"
        <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Information">
            <TraceIdentifier>MessageSent.aspx</TraceIdentifier>
        </TraceRecord>
    "

期望输出

引号之间的

在节点

中有一个空格但没有行
"       <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Information">
            <TraceIdentifier>MessageSent.aspx</TraceIdentifier>
        </TraceRecord>"

1 个答案:

答案 0 :(得分:0)

将部件./node()更改为*应解决问题

另外,您可能会问如何删除添加到表标记

中的命名空间

基于Remove namespace declaration from XSLT stylesheet with XSLT添加以下部分

<!-- Copy elements -->
<xsl:template match="*" priority="-1">
   <xsl:element name="{name()}">
      <xsl:apply-templates select="node()|@*"/>
   </xsl:element>
</xsl:template>

<!-- Copy all other nodes -->
<xsl:template match="node()|@*" priority="-2">
   <xsl:copy />      
</xsl:template>

并更改

<xsl:copy-of select="*"/>

<xsl:apply-templates select="*"/>