现有XML文件中的回车符或换行符

时间:2015-10-23 06:28:50

标签: xml cmd ftp

我们有一些合作伙伴通过XML文件发送产品订单。他们使用FTP发送到我们的服务器。 Windows命令行脚本将从FTP服务器获取它并将其发送到我们的AS400 / System I.它将被处理为已注册的订单。 现在我们开始与新的合作伙伴合作,它以与其他合作伙伴相同的方式向我们发送XML,唯一的问题是这个XML是由一长串代码组成的,具有漂亮的印刷布局。这是AS400程序的问题。 我想在Windows命令行脚本中添加一些代码,以便在每个结束标记之后获得换行符 例如 这是原始XML的一部分

    <?xml version="1.0" encoding="UTF-8"?><czavinh3 xmlns="urn:com.sap.b1i.vplatform:entity"><envelope><sender>Lottum</sender><receiver>8714253093123</receiver></envelope><message><docnum>1122259</docnum><docdtm>2015-09-28</docdtm><txts>test1234</txts>

以下是as400想要的例子

    <?xml version="1.0" encoding="UTF-8"?>
    <czavinh3 xmlns="urn:com.sap.b1i.vplatform:entity">
    <envelope>
    <sender>Lottum</sender>
    <receiver>8714253093123</receiver>
    </envelope>
    <message>
    <docnum>1122259</docnum>
    <docdtm>2015-09-28</docdtm>
    <txts>test1234</txts>

我认为最快的方法是搜索并替换&gt;&lt;对于&gt;(输入)&lt;这很容易完成,我不知道如何自动化这个

2 个答案:

答案 0 :(得分:0)

首先,发布的文档不符合xml标准。它似乎缺少结束标记</message></czavinh3>。假设它们被简单地省略并且xml格式正确,你可以使用一个小的java程序(在Pretty-printing output from javax.xml.transform.Transformer with only standard java api (Indentation and Doctype positioning)之后),如:

package xmlprettyprint;

import java.io.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;

public class XmlPrettyPrint {

    public static void main(String[] args) throws TransformerException, FileNotFoundException {

        // Instantiate transformer input
        Source xmlInput = new StreamSource(new FileReader(args[0]));
        StreamResult xmlOutput = new StreamResult(new StringWriter());

        // Configure transformer
        Transformer transformer = TransformerFactory.newInstance()
            .newTransformer(); // An identity transformer
        transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "testing.dtd");
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.transform(xmlInput, xmlOutput);

        System.out.println(xmlOutput.getWriter().toString());
    }
}

它从命令行读取文件名,解析它并执行漂亮的打印输出,从而产生如下输出:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE czavinh3 SYSTEM "testing.dtd">
    <czavinh3 xmlns="urn:com.sap.b1i.vplatform:entity">
    <envelope>
    <sender>Lottum</sender>
    <receiver>8714253093123</receiver>
    </envelope>
    <message>
    <docnum>1122259</docnum>
    <docdtm>2015-09-28</docdtm>
    <txts>test1234</txts>
    </message>
    </czavinh3>

如果jar文件名为xmlPrettyPrint.jar,则可以从命令行调用java程序,如:

java -jar xmlPrettyPrint.jar input.xml

,输出就像上面一样。

答案 1 :(得分:0)

不是一个优秀的程序员让我的问题成为一个难题。与一些有更多编程经验的朋友交谈,告诉我FART(查找和替换文本)

下载here

此工具是一个exe文件,允许您从文件中更改ASCII。 我的问题是传入的XML文件是由1个字符串组成的,这是处理它的问题。

通过以下语句,我通过输入换行符将XML更改为Pretty Print文件

    fart -c --c-style input.xml "><" ">\r<"

选项-c --c-style允许你使用c-cstyle扩展字符,例如\ r \ n(回车)

以下是您可以使用的其他选项

    Find And Replace Text  v1.99b                         by Lionello Lunesu

    Usage: FART [options] [--] <wildcard>[,...] [find_string] [replace_string]

    Options:
    -h, --help          Show this help message (ignores other options)
    -q, --quiet         Suppress output to stdio / stderr
     -V, --verbose       Show more information
     -r, --recursive     Process sub-folders recursively
     -c, --count         Only show filenames, match counts and totals
     -i, --ignore-case   Case insensitive text comparison
     -v, --invert        Print lines NOT containing the find string
     -n, --line-number   Print line number before each line (1-based)
     -w, --word          Match whole word (uses C syntax, like grep)
     -f, --filename      Find (and replace) filename instead of contents
     -B, --binary        Also search (and replace) in binary files (CAUTION)
     -C, --c-style       Allow C-style extended characters (\xFF\0\t\n\r\\ etc.)
         --cvs           Skip cvs dirs; execute "cvs edit" before changing files
         --svn           Skip svn dirs
         --remove        Remove all occurences of the find_string
     -a, --adapt         Adapt the case of replace_string to found string
     -b, --backup        Make a backup of each changed file
     -p, --preview       Do not change the files but print the changes