Dom4j是Java語言中常用的XML解析器,可以很方便地將XML文檔轉換為Java對象進行操作。但是隨著JSON格式的流行,有時候我們需要將Dom4j對象轉換為JSON格式。
在Dom4j中,我們可以使用jackson-core和jackson-dataformats來將XML轉換為JSON。下面是一個具體的代碼示例:
public static String dom4jToJson(Document document) throws Exception { StringWriter writer = new StringWriter(); JsonGenerator json = (new JsonFactory()).createJsonGenerator(writer); json.writeStartArray(); for (Element element : (Iterable)document.getRootElement().elementIterator()) { json.writeStartObject(); for (Attribute attr : (Iterable )element.attributeIterator()) { json.writeStringField("@" + attr.getName(), attr.getValue()); } if (element.getTextTrim().length() >0) { json.writeStringField(element.getName(), element.getText()); } else { json.writeFieldName(element.getName()); write(document, json, element); } json.writeEndObject(); } json.writeEndArray(); json.flush(); json.close(); return writer.toString(); }
上面的代碼將Document對象轉換為JSON字符串。其中,使用了Jackson庫的JsonGenerator對象進行JSON字符串的生成。在遍歷Dom4j中的元素時,我們將元素的屬性作為JSON相應元素的字段名,將元素的文本內容作為JSON相應元素的值。
注意,上述代碼中的write方法采用了遞歸算法,用于處理嵌套的XML元素。這部分代碼如下:
private static void write(Document document, JsonGenerator json, Element element) throws Exception { json.writeStartObject(); for (Attribute attr : (Iterable)element.attributeIterator()) { json.writeStringField("@" + attr.getName(), attr.getValue()); } Iterator iter = element.elementIterator(); while (iter.hasNext()) { Element childElement = (Element) iter.next(); if (childElement.elements().size() >0) { write(document, json, childElement); } else { if (childElement.getTextTrim().length() >0) { json.writeStringField(childElement.getName(), childElement.getText()); } } } json.writeEndObject(); }
通過上述方式,我們可以很方便地將Dom4j對象轉換為JSON格式,方便進行進一步的操作。
上一篇python 爬取詞典
下一篇python 相似度成分