在 java 中以编程方式关闭打开的 XML 元素标签
Close an open XML element tag, programmatically in java
我有一个 XML 字符串作为服务器的响应,带有一些开放标签,例如:
示例:
<Address1><Street>This caused error coz street is not closed</Address1>
<Address2>This displayed normal</Address2>
当我解析上面的 xml 字符串时,我得到了,
org.xml.sax.SAXParseException:
必须收集元素类型 "Street"。
注意:我无法更改服务器文件。
首先,我认为您不应该使用无效 XML,因为它会导致不可预知的结果。最适合您的方法是更新服务器文件以具有有效的 XML 内容。
也就是说,您可以使用 Jsoup,这是一个 HTML 解析器,可以帮助管理此类无效的 XML。
对于您提供的示例:
String xml = "<Address1><Street>This caused error coz street is not closed</Address1><Address2>This displayed normal</Address2>";
Document doc = Jsoup.parse(xml, "", Parser.xmlParser());
Elements elements = doc.getElementsByTag("Address1");
System.out.println(elements.first().text());
// it will print: "This caused error coz street is not closed"
Elements elements2 = doc.getElementsByTag("Address2");
System.out.println(elements2.first().text());
// it will print: "This displayed normal"
Street
元素将被忽略。
我有一个 XML 字符串作为服务器的响应,带有一些开放标签,例如: 示例:
<Address1><Street>This caused error coz street is not closed</Address1>
<Address2>This displayed normal</Address2>
当我解析上面的 xml 字符串时,我得到了, org.xml.sax.SAXParseException: 必须收集元素类型 "Street"。
注意:我无法更改服务器文件。
首先,我认为您不应该使用无效 XML,因为它会导致不可预知的结果。最适合您的方法是更新服务器文件以具有有效的 XML 内容。
也就是说,您可以使用 Jsoup,这是一个 HTML 解析器,可以帮助管理此类无效的 XML。
对于您提供的示例:
String xml = "<Address1><Street>This caused error coz street is not closed</Address1><Address2>This displayed normal</Address2>";
Document doc = Jsoup.parse(xml, "", Parser.xmlParser());
Elements elements = doc.getElementsByTag("Address1");
System.out.println(elements.first().text());
// it will print: "This caused error coz street is not closed"
Elements elements2 = doc.getElementsByTag("Address2");
System.out.println(elements2.first().text());
// it will print: "This displayed normal"
Street
元素将被忽略。