【问题标题】:Remove first line from a text file using XSLT使用 XSLT 从文本文件中删除第一行
【发布时间】:2009-09-18 21:00:36
【问题描述】:

我正在使用一个生成文本文件的系统 (Maximo)。
我只需要删除文件的第一行。
这样做的方法应该是使用 XSLT。

有什么想法吗?

【问题讨论】:

    标签: xslt flat-file


    【解决方案1】:

    是的,您可以在 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>
    

    【讨论】:

    • 实体引用非常酷!我希望它对他有用。 :-)
    【解决方案2】:

    做到这一点的方法是不使用 XSLT。

    XSLT 可以生成 文本文件,但不能处理 文本文件。它只能处理格式良好的 XML。

    【讨论】:

    • 不使用 XSLT 的方法。 -- 同意,但目前这是唯一可行的选择。
    • @NitroxDM — 这就是这里的每个答案都想表达的意思 — 如果 XSLT 是您拥有的唯一工具,那么它就无法完成 .您必须使用其他工具来实现您的目标,如果您完全可以使用其他工具,那么您就有了使用比 XSLT 更合适的工具的途径。
    • @Ben Blank - XSLT 解决方案是完全可能的。看我的回答。
    【解决方案3】:

    XSLT 只会将有效的 XML 文件作为输入,而不是一般的文本文件。不过,它可以输出文本。

    (例如,我使用 XSLT 生成 C 代码。)

    【讨论】:

    • XSLT 2.0 可以使用 unparsed-text() 函数处理非 XML 文件,而 XSLT 1.0 可以通过将其用作实体引用来欺骗处理纯文本。
    【解决方案4】:

    如果您的 XSLT 处理器支持任意转换(通过 FFD 的二进制 xforms - 平面文件描述符),则有可能这样做。您可以将文本包装在一个节点中,然后使用常规 XSLT 模板对该节点进行操作,以输出第一个回车之后的任何内容。

    【讨论】:

    • 可以使用 XSLT 将文本文件的内容包装到一个节点中吗?
    • @NitroxDM — Catch-22。如果需要先处理文件才能将其与 XSLT 一起使用,则不能使用 XSLT 进行该处理。
    • 取决于您的处理器/平台 - WebSphere DataPower(一种 SOA 设备)支持 - ibm.com/developerworks/forums/thread.jspa?messageID=14107417
    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 2020-02-25
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 2013-05-13
    相关资源
    最近更新 更多