【问题标题】:XSLT and Line FeedsXSLT 和换行
【发布时间】:2009-05-07 19:18:20
【问题描述】:

我正在使用 XSLT 重新格式化一些 XML,以 (a) 将元素转换为属性并 (b) 按字母顺序对所有内容进行排序。它的工作原理除了属性都在一行上。我知道这通常是可取的,但在这种情况下,当我在 Notepad++(或其他)中打开文件时,我需要每个属性出现在单独的行上。

我可以使用 xsl:text 添加 XML 样式的换行符,但这不是我想要的。分隔符的值属性不起作用(这是在 .NET 的 XSL 库下)。我想要“非 XML”换行符,例如。非 XML 感知编辑器将解释为在其自己的行上显示每个属性的类型。有什么想法吗?

【问题讨论】:

标签: xslt attributes


【解决方案1】:

我认为你不能用 XSLT 做到这一点。您正在寻找的是一个漂亮的 XML 打印机。为什么不对 XSLT 的输出进行后处理?我通常通过“xmllint --format -”管道传输此类内容,但这并不能实现您想要的格式。自己动手有多难?特别是,如果它只需要执行您正在使用的 XML 子集(如果您不关心名称空间等,这会变得更容易)。

【讨论】:

  • 是的,我认为你是对的。没那么难……只是 XSL 似乎已经支持几乎所有东西,我希望它也能做到这一点!干杯,谢谢。
【解决方案2】:

尚不清楚“XML”与“非 XML”换行符的含义,但这是您想要的:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/">
      <node>
        <xsl:text>&#010;</xsl:text>
      </node>
    </xsl:template>
</xsl:stylesheet>

【讨论】:

  • 谢谢,但这实际上将#010 放入了输出中。而我希望在输出中有一个 CRLF 字符,所以当我在非 XML 感知编辑器中打开文件时,会有换行符。
  • 实际上,这不是他想要的 - 他想使用 并让它们从新行开始,而不是从与它们所在的节点相同的行开始附在...
【解决方案3】:

您是指 between 属性还是 within 属性值的换行符?如果是后者,那根本做不到,due to the XML attribute normalization requirements

这是因为 XML 1.0 要求将属性值中的换行符规范化为空格,但要求不对换行符的字符引用进行规范化。数据模型中的属性值表示归一化后的属性值。如果在树中的属性值中出现的换行符作为换行符而不是作为字符引用输出,则通过重新解析 XML 创建的树中的属性值将包含空格而不是换行符,这意味着树有没有正确输出。

【讨论】:

  • 我指的是介于之间,因此属性出现在通用编辑器中,每行一个属性。
猜你喜欢
  • 1970-01-01
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 2014-09-17
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
相关资源
最近更新 更多