1

我正在使用 XSLT 将 XML 文件转换为适合其他程序读取的其他 XML 文件。我遇到的问题是我试图转换的 XML 文件中的一个节点有大量嵌入的 br 标记而不是实际的空格,我似乎无法弄清楚如何处理这些。XSLT 元素的 value-of 和 copy-of 都去除了 BR 标记,但实际上并未正确处理它们,因此生成的 XML 非常难看。理想情况下,我只想为我处理 HTML,但将 HTML 保存为我可以在 XSLT 中自己处理的字符串也可以。

示例文本:

 <Node>
        <Node2>
          <Node3>
            <Node4>
              <p>Text:<br/><br/>Text2 <br/><br/>Text3<br/><br/>

XSLT:

<Test><xsl:value-of select="Node/Node2/Node3/Node4"/></Test>

输出:

<Test>Text: Text2 Text3</Test>

期望的输出:

<Test>Text:

Text2

Text3</Test>
4

1 回答 1

2

只需br根据输出要求将标签替换为换行或回车的 XML 实体。

<xsl:template match="br">
    <xsl:text>&#xA;</xsl:text> <!-- line feed -->
    <xsl:text>&#xD;</xsl:text> <!-- Carriage return -->
</xsl:template>

编辑:不要使用value-ofwhich 只获取元素下任何和所有文本的文字值,而是尝试沿着这一行做一些事情:

<xsl:template match="/">
    <Test><xsl:apply-templates select="Node/Node2/Node3/Node4/*" /></Test>
</xsl:template>    

<xsl:template match="br">
    <xsl:text>&#xA;</xsl:text> <!-- line feed -->
    <xsl:text>&#xD;</xsl:text> <!-- Carriage return -->
</xsl:template>

<!-- identity transform -->
<xsl:template match="@*|node()|text()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()|text()" />
  </xsl:copy>
</xsl:template>
于 2013-10-17T00:17:45.730 回答