我们有一些合作伙伴通过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;这很容易完成,我不知道如何自动化这个
答案 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