UPDATE
如果前綴不符合命名空間聲明,那麼你可以使用從我從一個相關的問題下面鏈接的答案的方法:
關於NAMESPACE QUA的提示LIFICATION
所使用的前綴在對象到XML的映射方面沒有發揮作用。只要xyz
和pqr
前綴對應於相同的命名空間,對於支持命名空間的任何對象到XML解決方案,您都會很好。
即使以下文檔包含不同的前綴,它們也具有相同的名稱空間限定。
文獻#1
<abc:city xmlns:abc="ABC" xmlns:def="DEF" xmlns:ghi="XYZ">
<def:cityName/>
<ghi:postalTown>
Sacramento
</ghi:postalTown>
</abc:city>
文獻2
<jkl:city xmlns:jkl="ABC" xmlns:mno="DEF" xmlns:pqr="XYZ">
<mno:cityName/>
<pqr:postalTown>
Sacramento
</pqr:postalTown>
</jkl:city>
JAXB和命名空間
貝洛w是如何將City
類映射到上面的XML文檔。請注意,它是名稱空間URI而不是在@XmlRootElement
和@XmlElement
註釋中指定的前綴。
package forum11932402;
import javax.xml.bind.annotation.*;
@XmlRootElement(namespace="ABC")
public class City {
@XmlElement(namespace="DEF")
String cityName;
@XmlElement(namespace="XYZ")
String postalTown;
}
下面是JAXB和命名空間的一些信息:
演示代碼
以下演示代碼可用於解組我之前在此答案中發佈的任何XML文檔。
package forum11932402;
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(City.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum11932402/input.xml");
City city = (City) unmarshaller.unmarshal(xml);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(city, System.out);
}
}
以下是運行演示代碼的輸出。 JAXB實現已經分配了新的前綴。 cityName
元素仍然是限定名稱空間的,它只對應於聲明爲xmls="DEF"
的默認名稱空間。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:city xmlns="DEF" xmlns:ns2="XYZ" xmlns:ns3="ABC">
<cityName></cityName>
<ns2:postalTown>
Sacramento
</ns2:postalTown>
</ns3:city>
前綴是否與名稱空間聲明相對應,或者您是否有元素名稱,只是恰好在其中包含冒號字符? – 2012-08-13 10:54:18
前綴對應於名稱空間聲明 – 2012-08-13 10:55:33