[英]Parsing pseudo XML file in Java
我正在嘗試解析來自偽XML格式的文件中的文本。 當它出現在以下結構中時,我可以從中獲取DOM文檔:
<product>
<product_id>234567</product_id>
<description>abc</description>
</product>
當結構類似於以下內容時,我遇到的問題發生了:
<product>
<product_id>234567</product_id>
<description>abc</description>
<quantity 1:2>
<version>1.1</version>
</quantity 1:2>
<version>1.2</version>
<quantity 2:2>
</quantity 2:2>
</product>
由於<quantity 1:2>
的空格,它會生成以下異常:
org.xml.sax.SAXParseException:[Fatal Error] :1:167: Element type " quantity " must be followed by either attribute specifications, ">" or "/>"
我可以通過用下划線替換空間來解決這個問題。 問題是結構的大小可能不同,並且包含幾個具有相同格式的子節點( <node 1:x>
),並且該文件可以包含數百個要解析的結構。 是否有一個類可以解析像這樣的文本返回一個類似樹的對象?
預處理文件並使用x:y格式將<element value="x:y"/>
更改為<element value="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>
或類似的東西。
由於
<quantity 1:2>
的空格,它會生成以下異常
這不是錯誤的根本原因,根本原因是,正如人們已經提到的,您的文件格式不是有效的XML。 有效的XML標記看起來像<quantity attr1="val1" attr2="val2>
。
聽起來你無法控制文件格式。 在這種情況下,我認為最簡單的方法是將文件預處理為有效的XML,然后使用DOM / SAX解析器來解析它:
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 */
請注意,我沒有測試此代碼,也沒有進行優化; 只想給你一個主意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.