我想使用JAXB解組一個xml文件。當我使用@XmlElement用正確的名稱和命名空間解組作品(如@XmlElement(名稱=「名字」,命名空間=「http://www.test.com」))使用JAXB解析xml - 使用XmlType和proporder的命名空間
如果我使用XmlType將一起與propOrder它不幸不再(例如@XmlType(namespace =「http://www.test.com」,name =「」,propOrder = {「name」,「description」}))。
xml文件(的test.xml)的含量:
<Operation xmlns="http://www.test.com">
<Parameter>
<name>Param1</name>
<description>Description of Parameter1</description>
</Parameter>
<Parameter>
<name>Param2</name>
<description>Description of Parameter2</description>
</Parameter>
</Operation>
JAXBExample.java的含量爲:
package stackoverflow.problem.jaxb.ns;
import java.io.FileNotFoundException;
import java.io.FileReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
public class JAXBExample {
public static void main(String[] args) throws JAXBException, FileNotFoundException {
String xmlFilename = "test.xml";
JAXBContext context = JAXBContext.newInstance(Operation.class);
System.out.println("Output from our XML File: ");
Unmarshaller um = context.createUnmarshaller();
Operation op = (Operation) um.unmarshal(new FileReader(xmlFilename));
System.out.println("Operation-Content: " + op);
}
}
包stackoverflow.problem的含量。 jaxb.ns;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="Operation", namespace="http://www.test.com")
@XmlAccessorType(XmlAccessType.FIELD)
public class Operation {
@XmlElement(name = "Parameter", namespace="http://www.test.com")
List<Parameter> parameterList;
@Override
public String toString(){
String retVal = "";
for(Parameter currentParameter: parameterList){
retVal += currentParameter.toString() + "\n";
}
return retVal;
}
}
而且Parameter.java的內容是:
package stackoverflow.problem.jaxb.ns;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlType(namespace="http://www.test.com", name = "", propOrder = {"name", "description"})
@XmlAccessorType(XmlAccessType.FIELD)
public class Parameter {
//@XmlElement(name = "name", namespace="http://www.test.com")
String name;
//@XmlElement(name = "description", namespace="http://www.test.com")
String description;
@Override
public String toString(){
return this.name + "\t" + this.description;
}
}
如果我取消在最後代碼塊(Parameter.java)兩個@XmlElement線,解組工作正常。如果不包含這兩行,那麼Parameter對象中的兩個字段都爲空。在XmlType中使用propOrder時,是否有另一種方法來聲明一個名稱空間?還是我做了其他錯誤?
+1 - 更多有關JAXB和命名空間參見:http://blog.bdoughan.com/2010/08/jaxb-namespaces.html –
只需指出:它不僅不會因爲不必將其放在每個字段中而使代碼更加混亂,它也可以解決了在PropOrder中使用名稱空間的問題。 – Exocom