gpt4 book ai didi

android - 在 Android 上使用 simplexml 将 xml 字符串转换为对象给出 ParseError (AttributePrefixUnbound)

转载 作者:行者123 更新时间:2023-11-29 01:36:36 25 4
gpt4 key购买 nike

我有一个 XML 字符串:

<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);

这是我转换成的 bean:

    @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"/>

如果我保留那些包含“xsi:nil”属性的行,如何让 simplexml 正确解析 xml?

最佳答案

我想通了。提供的 XML 并不完全正确。

我将 namespace 添加到第一个元素:

<Transactions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
...
</Transactions>

Simplexml 现在可以无一异常(exception)地解析它。

我只要求正确生成正在生成的 xml。

关于android - 在 Android 上使用 simplexml 将 xml 字符串转换为对象给出 ParseError (AttributePrefixUnbound),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27565846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com