【发布时间】:2014-01-10 12:50:16
【问题描述】:
我得到了这个格式不正确的 XML 文件,但无论如何我都需要解析它。我已经尝试了所有解析选项,比如 DOM / SAX 解析,但仍然无法实现,试过 this
那么任何人都可以指导我如何解析这种格式不正确的 xml 数据。
这是 XML 文件
<?xml version="1.0" ?>
<Employee>
<Name> Jack
<EMPID> EMP001 <Address> 12 CA, USA</Address>
</EMPID>
</Name>
</Employee>
解析代码
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse(new File(
"new.xml"));
// normalize text representation
doc.getDocumentElement().normalize();
System.out.println("Root element of the doc is "
+ doc.getDocumentElement().getNodeName());
NodeList listOfPersons = doc.getElementsByTagName("NAME");
int totalPersons = listOfPersons.getLength();
for (int s = 0; s < listOfPersons.getLength(); s++) {
Node firstPersonNode = listOfPersons.item(s);
if (firstPersonNode.getNodeType() == Node.ELEMENT_NODE) {
Element firstPersonElement = (Element) firstPersonNode;
// -------
NodeList firstNameList = firstPersonElement
.getElementsByTagName("Name");
Element firstNameElement = (Element) firstNameList.item(0);
NodeList textFNList = firstNameElement.getChildNodes();
System.out
.println("Name : "
+ ((Node) textFNList.item(0))
.getNodeValue().trim());
// -------
NodeList lastNameList = firstPersonElement
.getElementsByTagName("EMPID");
Element lastNameElement = (Element) lastNameList.item(0);
NodeList textLNList = lastNameElement.getChildNodes();
System.out
.println("ID : "
+ ((Node) textLNList.item(0))
.getNodeValue().trim());
// ----
NodeList ageList = firstPersonElement
.getElementsByTagName("Address");
Element ageElement = (Element) ageList.item(0);
NodeList textAgeList = ageElement.getChildNodes();
System.out.println("Address : "
+ ((Node) textAgeList.item(0)).getNodeValue()
.trim());
}
}
} catch (SAXParseException err) {
System.out.println("** Parsing error" + ", line "
+ err.getLineNumber() + ", uri " + err.getSystemId());
System.out.println(" " + err.getMessage());
} catch (SAXException e) {
Exception x = e.getException();
((x == null) ? e : x).printStackTrace();
} catch (Throwable t) {
t.printStackTrace();
}
【问题讨论】:
-
你没有有效的 XML,所以我认为你不能使用标准的 Java XML 解析器来解析它
-
无法解析无格式的 XML 文件。以上 XML 格式不正确。纠正它。 Java API 会处理它。不要再编写另一个 Java API 来读取不正确的 XML。
-
“所有解析选项”是什么意思?你能解释一下你的问题吗?
-
当您尝试解析它时遇到什么错误?我不同意这是非法的 XML。
-
但问题不在于格式,所以它必须与您的代码有关。你能发布你用来解析它的代码吗?
标签: java xml parsing xml-parsing