[英]JAXB Unmarshalling an subset of Unknown XML content
我需要unmarshall
組未知XML
內容的子集,使用該未編組的對象,我需要修改一些內容並使用原始XML重新綁定相同的XML內容(子集)。
示例輸入XML:
<Message>
<x>
</x>
<y>
</y>
<z>
</z>
<!-- Need to unmarshall this content to "Content" - java Object -->
<Content>
<Name>Robin</Name>
<Role>SM</Role>
<Status>Active</Status>
</Content>
.....
</Message>
需要通過將其他XML部分保持相同來單獨解組<Content>
標記。 需要修改<Content>
標記中的元素並將修改后的XML部分與原始文件綁定,如下所示:
預期輸出XML:
<Message>
<x>
</x>
<y>
</y>
<z>
</z>
<!-- Need to unmarshall this content to "Content" - java Object -->
<Content>
<Name>Robin_123</Name>
<Role>Senior Member</Role>
<Status>1</Status>
</Content>
.....
</Message>
我的問題:
這個要求的可能解決方案是什么? (除了DOM
解析 - 因為XML contnet非常龐大)
在JAXB2.0
有沒有選擇呢?
請提供您的建議。
對於給定的示例,此代碼創建一個DOM文檔,其中包含Content
元素的根元素:
class ContentFinder implements StreamFilter {
private boolean capture = false;
@Override public boolean accept(XMLStreamReader xml) {
if (xml.isStartElement() && "Content".equals(xml.getLocalName())) {
capture = true;
} else if (xml.isEndElement() && "Content".equals(xml.getLocalName())) {
capture = false;
return true;
}
return capture;
}
}
XMLInputFactory inFactory = XMLInputFactory.newFactory();
XMLStreamReader reader = inFactory.createXMLStreamReader(inputStream);
reader = inFactory.createFilteredReader(reader, new ContentFinder());
Source src = new StAXSource(reader);
DOMResult res = new DOMResult();
TransformerFactory.newInstance().newTransformer().transform(src, res);
Document doc = (Document) res.getNode();
在輸出上重寫XML時可以使用類似的技術。
JAXB似乎不直接接受StreamSource
,至少在Oracle 1.7實現中是這樣。
您可以使用@XmlAnyElement
在類上注釋Object
屬性,默認情況下,未映射的內容將作為DOM節點捕獲。 如果指定DomHandler
上@XmlAnyElement
那么你可以控制的格式。 以下是一個示例的鏈接,其中內容保存為String
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.