ソースを参照

处理XML有特殊字符的情况

LiHaoyu 5 年 前
コミット
31a4eb6c8d

+ 11 - 4
src/main/java/net/mooctest/www/android_auto_test/utils/DoXml.java

@@ -3,11 +3,9 @@ package net.mooctest.www.android_auto_test.utils;
 import net.mooctest.www.android_auto_test.models.Component;
 import org.jdom2.Document;
 import org.jdom2.Element;
-import org.jdom2.JDOMException;
 import org.jdom2.input.SAXBuilder;
 
-import java.io.File;
-import java.io.IOException;
+import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -16,7 +14,10 @@ public class DoXml {
         List<Component> list = null;
         try {
             SAXBuilder builder = new SAXBuilder();
-            Document doc = builder.build(new File(path));
+            String content = FileUtil.readFileContext(path);
+            content = transferContent(content);
+            StringReader is = new StringReader(content);
+            Document doc = builder.build(is);
             Element foo = doc.getRootElement();
             list=new ArrayList();
             list=DFS(foo,list);
@@ -25,6 +26,12 @@ public class DoXml {
         }
         return list;
     }
+
+    private String transferContent(String content){
+        content = content.replaceAll("&", "&amp;");
+        return content;
+    }
+
     List<Component> DFS(Element e,List<Component> list){
         List allChildren = e.getChildren();
         if(allChildren.size() <= 0){

+ 27 - 0
src/main/java/net/mooctest/www/android_auto_test/utils/FileUtil.java

@@ -86,4 +86,31 @@ public class FileUtil {
         writer.write(content);
         writer.close();
     }
+
+    public static String readFileContext(String filePath){
+        FileInputStream fin = null;
+        InputStreamReader reader = null;
+        BufferedReader buffReader = null;
+        try {
+            fin = new FileInputStream(filePath);
+            reader = new InputStreamReader(fin);
+            buffReader = new BufferedReader(reader);
+            String line;
+            StringBuilder result = new StringBuilder();
+            while ((line = buffReader.readLine()) != null){
+                result.append(line);
+            }
+            return result.toString();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                assert buffReader != null;
+                buffReader.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return null;
+    }
 }

+ 10 - 1
src/main/java/net/mooctest/www/android_auto_test/utils/ParseXml.java

@@ -6,6 +6,7 @@ import org.jdom2.Element;
 import org.jdom2.input.SAXBuilder;
 
 import java.io.File;
+import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -19,7 +20,10 @@ public class ParseXml {
 		List<Component> list = null;
 		try {
 			SAXBuilder builder = new SAXBuilder();
-			Document doc = builder.build(new File(path));
+			String content = FileUtil.readFileContext(path);
+			content = transferContent(content);
+			StringReader is = new StringReader(content);
+			Document doc = builder.build(is);
 			Element foo = doc.getRootElement();
 			list = new ArrayList();
 			list = DFS(foo,list);
@@ -30,6 +34,11 @@ public class ParseXml {
 		return list;
 	}
 
+	private String transferContent(String content){
+		content = content.replaceAll("&", "&amp;");
+		return content;
+	}
+
 	List<Component> DFS(Element e,List<Component> list){
 //		PrintUtil.print("ParseXml fff" + e.getName(), "TAG");
 		List allChildren = e.getChildren();