Java 在xml中解析xml
我有以下问题。我在XML中有一个XML。见示例:Java 在xml中解析xml,java,xml,xml-parsing,Java,Xml,Xml Parsing,我有以下问题。我在XML中有一个XML。见示例: <?xml version="1.0" encoding="UTF-8" standalone="no" ?> <!DOCTYPE ..."><AIDEM><OSERVER>xxx</OSERVER> <OBJECT SystemID = "111" ObjectID = "00000004009e8bc1" Docu = "some value" DirectoryID = "1
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE ..."><AIDEM><OSERVER>xxx</OSERVER>
<OBJECT SystemID = "111" ObjectID = "00000004009e8bc1" Docu = "some value" DirectoryID = "111" InternalType = "1" TemplateID = "1234" TemplateType = "6" TemplateName = "String">
<OHEADER><OFIELD FieldID = "1" FieldType = "3" FieldName = "string" IsEmpty = "no"><ODATETIME>11111</ODATETIME></OFIELD>
<OFIELD FieldID = "123" FieldType = "3" FieldName = "string" IsEmpty = "no"><ODATETIME>11111</ODATETIME></OFIELD>
<OFIELD FieldID = "124" FieldType = "1" FieldName = "string" IsEmpty = "no"><TEST_STRING><mos>
<ID>some.some.some</ID>
<sID>some.some</sID>
<mID>53570320</mID>
<mObj>
<oID>cl178317481</oID>
....
</TEST_STRING></OFIELD>
}
在我的示例中,所有内容都在一个字符串中,但我不知道如何正确处理内部XML。老实说,格式有点让我恼火。这样做并将内部XML打包成新XML的好方法是什么?提前感谢。您可以使用任何解析器将外部文档解析为DOM,就像您已经做的那样 然后遍历DOM,获取所有节点值并再次尝试用XML解析它们。成功后,您可以保存文档内部XML,从DOM中删除该节点,并将其保存到外部而不使用嵌套XML 最后,使用transformer呈现文档,就像您已经做的那样
为了提高效率,您可以尝试解析TextNodes,但我不确定这99%是否只影响文本节点或属性。您是否尝试使用JAXB或任何其他框架解析xml?谢谢您的评论@Smile我编辑了我的问题。小尼特:xml中没有xml,您有一个编码字符串作为其中一个节点的文本。因此,获取该节点的内容,取消转义,并处理生成的有效XML字符串。谢谢@DaveNewton您的回答,这对我帮助很大。使用StringEscapeUtils解决了问题。
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerException {
File file = new File("example.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(file);
DOMSource domSource = new DOMSource(document);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.transform(domSource, result);
String mystring = writer.toString();
System.out.println("String XML: \n" + mystring);
}