0
我有一個XML字符串:在Android上使用SimpleXML爲XML字符串轉換爲對象給出ParseError(AttributePrefixUnbound)
<Transactions>
<TaskFormInstance TransactionID="8230">
<uuid>df534b09-30fc-fe81-e411-a2862ef53439</uuid>
<taskId>272</taskId>
<status>3-COLLECTED</status>
<element>
<uuid>a99afff5-0927-21b7-e411-a286183d17bb</uuid>
<elementNo>1</elementNo>
<label>label1</label>
<type>Integer</type>
<dependsOn>0</dependsOn>
<minimumValue>0</minimumValue>
<maximumValue>100</maximumValue>
<minimumCharacters xsi:nil="true"/>
<maximumCharacters xsi:nil="true"/>
</element>
<element>
<uuid>a99afff5-0927-21b7-e411-a2864e4515bb</uuid>
<elementNo>2</elementNo>
<label>label2</label>
<type>Integer</type>
<dependsOn>0</dependsOn>
<minimumValue>0</minimumValue>
<maximumValue>50</maximumValue>
<minimumCharacters xsi:nil="true"/>
<maximumCharacters xsi:nil="true"/>
</element>
</TaskFormInstance>
</Transactions>
我使用SimpleXML將其轉換爲一個Java對象。
Serializer serializer = new Persister();
Reader reader = new StringReader(xml);
TaskFormTransactionListTransportBean taskFormTransactionListTransportBean = serializer.read(TaskFormTransactionListTransportBean.class, reader, false);
這裏是我的豆子其轉換爲:
@Root(name="Transactions")
public class TaskFormTransactionListTransportBean {
@ElementList(inline = true, required = false)
private ArrayList<TaskFormTransportBean> taskFormTransportBeans;
public TaskFormTransactionListTransportBean() {
taskFormTransportBeans = new ArrayList<TaskFormTransportBean>();
}
public ArrayList<TaskFormTransportBean> getTaskFormTransportBeans() {
return taskFormTransportBeans;
}
public void setTaskTransactions(ArrayList<TaskFormTransportBean> taskFormTransportBeans) {
this.taskFormTransportBeans = taskFormTransportBeans;
}
}
和:
@Root(name="TaskFormInstance")
public class TaskFormTransportBean {
@Attribute(name="TransactionID")
private String transactionId;
@Element(name="uuid",required=true)
private String uuid;
@Element(name="status",required=false)
private String status;
@Element(name="name",required=false)
private String name;
@Element(name="taskFormNumber",required=false)
private String taskFormNumber;
@ElementList(inline = true, required = false)
private ArrayList<ElementTransportBean> elements;
public String getTransactionId() {
return transactionId;
}
public void setTransactionId(String transactionId) {
this.transactionId = transactionId;
}
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTaskFormNumber() {
return taskFormNumber;
}
public void setTaskFormNumber(String taskFormNumber) {
this.taskFormNumber = taskFormNumber;
}
public ArrayList<ElementTransportBean> getElements() {
return elements;
}
public void setElements(ArrayList<ElementTransportBean> elements) {
this.elements = elements;
}
}
和:
@Root(name="element")
public class ElementTransportBean {
@Element(name="uuid",required=true)
private String uuid;
@Element(name="value",required=false)
private String value;
@Element(name="elementNo",required=true)
private String elementNo;
@Element(name="dependsOn",required=false)
private String dependsOn;
@Element(name="label",required=true)
private String label;
@Element(name="type",required=true)
private String type;
@Element(name="minimumValue",required=false)
private String minValue;
@Element(name="maximumValue",required=false)
private String maxValue;
@Element(name="minimumCharacters",required=false)
private String minNoOfChars;
@Element(name="maximumCharacters",required=false)
private String maxNoOfChars;
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getElementNo() {
return elementNo;
}
public void setElementNo(String elementNo) {
this.elementNo = elementNo;
}
public String getDependsOn() {
return dependsOn;
}
public void setDependsOn(String dependsOn) {
this.dependsOn = dependsOn;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getMinValue() {
return minValue;
}
public void setMinValue(String minValue) {
this.minValue = minValue;
}
public String getMaxValue() {
return maxValue;
}
public void setMaxValue(String maxValue) {
this.maxValue = maxValue;
}
public String getMinNoOfChars() {
return minNoOfChars;
}
public void setMinNoOfChars(String minNoOfChars) {
this.minNoOfChars = minNoOfChars;
}
public String getMaxNoOfChars() {
return maxNoOfChars;
}
public void setMaxNoOfChars(String maxNoOfChars) {
this.maxNoOfChars = maxNoOfChars;
}
}
我得到以下異常:
javax.xml.stream.XMLStreamException: ParseError at [row,col]:[15,42]
Message: http://www.w3.org/TR/1999/REC-xml-names-19990114#AttributePrefixUnbound?minimumCharacters&xsi:nil&xsi
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:598)
at com.sun.xml.internal.stream.XMLEventReaderImpl.nextEvent(XMLEventReaderImpl.java:83)
at org.simpleframework.xml.stream.StreamReader.read(StreamReader.java:110)
at org.simpleframework.xml.stream.StreamReader.next(StreamReader.java:94)
at org.simpleframework.xml.stream.NodeReader.readElement(NodeReader.java:121)
at org.simpleframework.xml.stream.InputElement.getNext(InputElement.java:216)
at org.simpleframework.xml.core.Composite.readElements(Composite.java:447)
at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
at org.simpleframework.xml.core.Composite.read(Composite.java:201)
at org.simpleframework.xml.core.Composite.read(Composite.java:148)
at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:190)
at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:167)
at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:124)
at org.simpleframework.xml.core.Composite.readVariable(Composite.java:623)
at org.simpleframework.xml.core.Composite.readInstance(Composite.java:573)
at org.simpleframework.xml.core.Composite.readUnion(Composite.java:549)
at org.simpleframework.xml.core.Composite.readElement(Composite.java:532)
at org.simpleframework.xml.core.Composite.readElements(Composite.java:445)
at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
at org.simpleframework.xml.core.Composite.read(Composite.java:201)
at org.simpleframework.xml.core.Composite.read(Composite.java:148)
at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:190)
at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:167)
at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:144)
at org.simpleframework.xml.core.Composite.readVariable(Composite.java:619)
at org.simpleframework.xml.core.Composite.readInstance(Composite.java:573)
at org.simpleframework.xml.core.Composite.readUnion(Composite.java:549)
at org.simpleframework.xml.core.Composite.readElement(Composite.java:532)
at org.simpleframework.xml.core.Composite.readElements(Composite.java:445)
at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
at org.simpleframework.xml.core.Composite.read(Composite.java:201)
at org.simpleframework.xml.core.Composite.read(Composite.java:148)
at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
at org.simpleframework.xml.core.Persister.read(Persister.java:625)
at org.simpleframework.xml.core.Persister.read(Persister.java:606)
at org.simpleframework.xml.core.Persister.read(Persister.java:584)
at org.simpleframework.xml.core.Persister.read(Persister.java:562)
at za.co.company.androidsoap.poc.AndroidSoapTest.getTaskFormInserts(AndroidSoapTest.java:323)
at za.co.company.androidsoap.poc.AndroidSoapTest.main(AndroidSoapTest.java:76)
za.co.company.androidsoap.poc.TransportException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[15,42]
Message: http://www.w3.org/TR/1999/REC-xml-names-19990114#AttributePrefixUnbound?minimumCharacters&xsi:nil&xsi
at za.co.company.androidsoap.poc.AndroidSoapTest.getTaskFormInserts(AndroidSoapTest.java:333)
at za.co.company.androidsoap.poc.AndroidSoapTest.main(AndroidSoapTest.java:76)
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[15,42]
Message: http://www.w3.org/TR/1999/REC-xml-names-19990114#AttributePrefixUnbound?minimumCharacters&xsi:nil&xsi
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:598)
at com.sun.xml.internal.stream.XMLEventReaderImpl.nextEvent(XMLEventReaderImpl.java:83)
at org.simpleframework.xml.stream.StreamReader.read(StreamReader.java:110)
at org.simpleframework.xml.stream.StreamReader.next(StreamReader.java:94)
at org.simpleframework.xml.stream.NodeReader.readElement(NodeReader.java:121)
at org.simpleframework.xml.stream.InputElement.getNext(InputElement.java:216)
at org.simpleframework.xml.core.Composite.readElements(Composite.java:447)
at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
at org.simpleframework.xml.core.Composite.read(Composite.java:201)
at org.simpleframework.xml.core.Composite.read(Composite.java:148)
at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:190)
at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:167)
at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:124)
at org.simpleframework.xml.core.Composite.readVariable(Composite.java:623)
at org.simpleframework.xml.core.Composite.readInstance(Composite.java:573)
at org.simpleframework.xml.core.Composite.readUnion(Composite.java:549)
at org.simpleframework.xml.core.Composite.readElement(Composite.java:532)
at org.simpleframework.xml.core.Composite.readElements(Composite.java:445)
at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
at org.simpleframework.xml.core.Composite.read(Composite.java:201)
at org.simpleframework.xml.core.Composite.read(Composite.java:148)
at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:190)
at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:167)
at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:144)
at org.simpleframework.xml.core.Composite.readVariable(Composite.java:619)
at org.simpleframework.xml.core.Composite.readInstance(Composite.java:573)
at org.simpleframework.xml.core.Composite.readUnion(Composite.java:549)
at org.simpleframework.xml.core.Composite.readElement(Composite.java:532)
at org.simpleframework.xml.core.Composite.readElements(Composite.java:445)
at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
at org.simpleframework.xml.core.Composite.read(Composite.java:201)
at org.simpleframework.xml.core.Composite.read(Composite.java:148)
at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
at org.simpleframework.xml.core.Persister.read(Persister.java:625)
at org.simpleframework.xml.core.Persister.read(Persister.java:606)
at org.simpleframework.xml.core.Persister.read(Persister.java:584)
at org.simpleframework.xml.core.Persister.read(Persister.java:562)
at za.co.company.androidsoap.poc.AndroidSoapTest.getTaskFormInserts(AndroidSoapTest.java:323)
... 1 more
如果我刪除從XML字符串以下行,它工作正常:
<minimumCharacters xsi:nil="true"/>
<maximumCharacters xsi:nil="true"/>
我怎麼SimpleXML來解析XML正確,如果我留下那些包含「xsi:nil」屬性的行?