【发布时间】:2009-09-18 21:00:36
【问题描述】:
我正在使用一个生成文本文件的系统 (Maximo)。
我只需要删除文件的第一行。
这样做的方法应该是使用 XSLT。
有什么想法吗?
【问题讨论】:
我正在使用一个生成文本文件的系统 (Maximo)。
我只需要删除文件的第一行。
这样做的方法应该是使用 XSLT。
有什么想法吗?
【问题讨论】:
是的,您可以在 XSLT 中完成您想要的!
如果您愿意,在 XSLT 2.0 中这样做可能会更容易。 Michael Kay answered a similar question on the XSL mailing list in 2005.
用小例子来解释他的答案:
在 XSLT 2.0 中,:您可以使用 unparsed-text() 函数读取文件,tokenize() 将其拆分为多行(忽略第一行)。
<xsl:for-each select="tokenize(unparsed-text($in), '\r?\n')">
...
</xsl:for-each>
在 XSLT 1.0 中:您可以通过伪装成 XML 来读取纯文本文件 外部实体,并从导致 要扩展的实体。
<!DOCTYPE foo [
<!ENTITY bar SYSTEM "bar.txt">
]>
<foo>
&bar;
</foo>
【讨论】:
做到这一点的方法是不使用 XSLT。
XSLT 可以生成 文本文件,但不能处理 文本文件。它只能处理格式良好的 XML。
【讨论】:
XSLT 只会将有效的 XML 文件作为输入,而不是一般的文本文件。不过,它可以输出文本。
(例如,我使用 XSLT 生成 C 代码。)
【讨论】:
如果您的 XSLT 处理器支持任意转换(通过 FFD 的二进制 xforms - 平面文件描述符),则有可能这样做。您可以将文本包装在一个节点中,然后使用常规 XSLT 模板对该节点进行操作,以输出第一个回车之后的任何内容。
【讨论】: