用Java解析伪XML文件

用Java解析伪XML文件,java,xml,parsing,Java,Xml,Parsing,我试图解析来自伪XML格式文件的文本。当DOM文档采用以下结构时,我可以从中获取它: <product> <product_id>234567</product_id> <description>abc</description> </product> 我可以通过用下划线替换空格来解决这个问题。问题在于,该结构的大小可能不同,并且包含多个具有相同格式的子节点(),并且该文件可能包含数百个要解析的结构。是否有

我试图解析来自伪XML格式文件的文本。当DOM文档采用以下结构时,我可以从中获取它:

<product>
    <product_id>234567</product_id>
    <description>abc</description>
</product>

我可以通过用下划线替换空格来解决这个问题。问题在于,该结构的大小可能不同,并且包含多个具有相同格式的子节点(
),并且该文件可能包含数百个要解析的结构。是否有一个类可以解析这样的文本并返回类似于树的对象?

预处理文件,并将x:y表单中的元素更改为
,这样您的DOM/SAX解析器就不会阻塞


我建议使用正则表达式来帮助您,但是。

您的文件根本不是XML,而SAX是XML(XML的简单API)。你应该重新思考你的结构,这样你就可以做如下事情:

<quantity myAttr="1.2">
    <version>1.2</version>
</quantity>
<quantity myAttr="1.x">
    <version>1.1</version>
</quantity>
<version>1.0</version>

1.2
1.1
1
或者类似的

由于


这不是错误的根本原因,根本原因是,正如人们已经提到的,您的文件格式不是有效的XML。一个有效的XML标记看起来像
我创建了一个类来将文件预处理为有效的XML。
org.xml.sax.SAXParseException:[Fatal Error] :1:167: Element type " quantity " must be followed by either attribute specifications, ">" or "/>"
<quantity myAttr="1.2">
    <version>1.2</version>
</quantity>
<quantity myAttr="1.x">
    <version>1.1</version>
</quantity>
<version>1.0</version>
FileInputStream file = new FileInputStream("pseudo.pxml");
ByteArrayOutputStream temp = new ByteArrayOutputStream();
int c = -1;

while ((c=file.read()) >= 0){
   temp.write(c);
}

String xml = new String(temp.toByteArray());
xml = xml.replaceAll("([^:\s]+:[^:\s]+)", "value=\"\\1\"");

ByteArrayInputStream xmlIn = new ByteArrayInputStream(xml.getBytes());

/* use xmlIn for your XML parsers */