在Java中解析没有结束标记的XML

时间:2018-01-06 16:48:38

标签: java xml xml-parsing sax stax

我在解析没有结束标记的XML时遇到问题。请参阅下面的xml片段。

我已经尝试过SAX和StAX Parser他们都需要一个格式正确的XML,结尾标记为XXYY ....正如你在下面看到的那样,XML格式有点不同......如果有任何API,请帮助我在那里可以帮助我解析这个或如果SAX / StAX可以帮助我实现我想要的...... :(

<Employees>
 <Employee>
  <Detail>
    <Date>2018014
    <Name>XXYY
    <Age>0
    <LANGUAGE>ENG
    <Manager>
    <MName>YYXX
    <MID>5959
    </Manager>
    <EmployeeID>1234
  </Detail>
 </Employee>
</Employees>

2 个答案:

答案 0 :(得分:2)

你可以&#34;修复&#34;通过添加所有缺少的结束标记来实现XML。

在同一行上标记之后包含文本的任何开始标记都可以通过在行尾添加结束标记来修复。

&#34;的规则包含文字&#34;确保例如<Manager>标记无法结束,因为实际上已经结束了3行。

工作代码示例:

// Load file into memory
String xml = new String(Files.readAllBytes(Paths.get("test.xml")), StandardCharsets.UTF_8);

// Apply magic to add missing end-tags
xml = xml.replaceAll("(?m)^(\\s*)<(\\w+)>([^<]+)$", "$1<$2>$3</$2>");

// Parse then print the XML, to ensure there are no errors
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder()
                                          .parse(new InputSource(new StringReader(xml)));
TransformerFactory.newInstance().newTransformer()
                  .transform(new DOMSource(document), new StreamResult(System.out));

答案 1 :(得分:1)

这似乎是SGML而不是XML。我已经回答了newer question(对于Javascript / node.js,但也与Java相关),详细说明了如何使用OpenSP SGML软件从SGML创建XML。