[英]Optional Namespace parsing XML via JAXB
在我的應用程序中,用戶上傳了幾個XML。 很少有上載的XML不包含名稱空間標簽,而其他XML包含名稱空間標簽。 我希望能夠同時支持這兩種上傳。 JAXB對前者給予例外。
我希望能夠將名稱空間設置為可選,即支持兩個文件。
有效的XML
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<ns2:transforms xmlns:ns2="http://www.mynamesapace.com/xmlbeans/connectorconfig">
失敗的XML
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<transforms>
這是我解組XML的方式
JAXBContext jaxbContext = JAXBContext.newInstance(Transforms.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
transforms = (Transforms) jaxbUnmarshaller.unmarshal(file);
這是我的情話
@XmlRootElement(name = "transforms", namespace =
"http://www.mynamesapace.com/xmlbeans/connectorconfig")
public class Transforms implements ConfigDiffable<Transforms,
ChangedTransforms> {
.....
更新 :
如果我刪除
namespace =
"http://www.mynamesapace.com/xmlbeans/connectorconfig"
沒有名稱空間的XML開始工作
創建一個類:
class XMLReaderWithoutNamespace extends StreamReaderDelegate {
public XMLReaderWithoutNamespace(XMLStreamReader reader) {
super(reader);
}
@Override
public String getAttributeNamespace(int arg0) {
return "";
}
@Override
public String getNamespaceURI() {
return "";
}
}
將您的解組更改為:
JAXBContext jaxbContext = JAXBContext.newInstance(Transforms.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
InputStream is = new FileInputStream(file);
XMLStreamReader xsr = XMLInputFactory.newFactory().createXMLStreamReader(is);
XMLReaderWithoutNamespace xr = new XMLReaderWithoutNamespace(xsr);
transforms = (Transforms) jaxbUnmarshaller.unmarshal(xr);
測試時,我在pojo中沒有定義名稱空間。
從這個答案中得出的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.