使用java修复格式错误的XML

时间:2015-04-14 07:23:57

标签: java xml

我有几个包含以下XML元素的文件:

     <table cellpadding="0" cellspacing="0" border="0"style="width:100%">

border="0"style="的部分需要0值和样式属性之间的空格。

不幸的是,有太多文件存在此问题,无法手动进行并插入空间是一个可行的选项。 我可以编辑属性,我可以通过创建一个Xpath来编辑值,该路径将表作为NodeList获取,创建节点并获取属性..但是如何在属性和值之间添加空格?

3 个答案:

答案 0 :(得分:1)

我们总是只能String.split("\"");在逗号上分开。

在这里,试试这个:

/** In reality, you would probably read file to string? 
 * or read line by line? either way is an easy fix! 
*/

String input = ("<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\"style=\"width:100%\">");
String xmlTag = StringUtils.substringBetween(input, "<", ">");

从索引号开始,拆分后的数组包含如下:

  1. XML标记名称
  2. ODD INDICES ~1,3,5等等,包含:属性名称。

    EVEN INDICES ~2,4,6等等,包含:属性值。

        int arrSize = xmlCharValPairs.length()        
        String[] xmlCharValPairs = xmlTag.split("\"");
        StringBuilder sb = new StringBuilder(arrSize);
    
        sb.append("<" + xmlCharValPairs[0] + " ");
    
        for (int i = 1; i < arrSize-1; i++) {
            if (i%2 == 0) 
                sb.append("\"" + xmlCharValPairs[i].trim() + "\" ");
            else 
                sb.append(xmlCharValPairs[i]);
        }
    
        String returnXMLFormat = sb.toString();
    

    这将为您提供所请求格式的XML字符串:)

答案 1 :(得分:0)

如果它的长度一致,那么你需要写的只是一个简单的字符串解析器,它会增加额外的&#34;&#34;在X位置。

如果它不是一样的我认为我会尝试检查char是否是&#34;然后从它得到一个char -1,然后检查它是否&#34; s =&#34;或(某些字母)&#34;例如a&#34;。

width="100" vs width="100" anotherparam="...

这可以告诉你它是否开始或结束了参数。如果它是结尾,那么只需在它后面添加一个空格字符。

然后你可以检查它是否是#34;(someletter)或&#34;(空格)来知道你的撇号之后是否有空格。

width="100" param2="..." vs width="100"param2=""

如果您允许说200个文件进行编辑,则可以使用与此类似的内容:

File folder = new File("your/path");
File[] listOfFiles = folder.listFiles();

然后只需在循环中打开文件,编辑它们并将它们保存到带有原始名称的新文件或只是覆盖当前文件。它取决于你。

答案 2 :(得分:0)

您的文件不是格式良好的XML,因此您需要一个能够处理格式不正确的XML的工具。它规定了XSLT / XQuery / XPath系列中的任何内容。

通过使用在"出现之后插入空格的正则表达式,您可以修复几乎所有出现的问题,并且不良副作用的风险很低。 {1}}。 (这将添加一些不必要的空格,但XML解析器将忽略它们。)