简体   繁体   English

XML元素过多

[英]XML with too many Elements

i'm currently using the simple framework to map a xml response to an Object. 我目前正在使用简单的框架将xml响应映射到对象。 This object has an Attribute of an ArrayList of another Class. 该对象具有另一个类的ArrayList的属性。 The code is running on android. 该代码在android上运行。

The problem in my case is, that the framework ends with an exception after the 63rd Element. 我的问题是,框架在第63个元素之后以异常结尾。

XMLPULLPARSEREXCEPTION: UNTERMINATED ENTITY REF 

Example of the xml response: xml响应示例:

<assignedUsers>
<user name="1" titel="user1" groupname="group1" ...><user name="2" titel="user2"... >...<user name="n" titel="userN" ...>
</assignedUsers>

The response contains arround 100 users. 响应包含大约100个用户。 The file contains 23599 characters. 该文件包含23599个字符。 I checked the response and it is fine. 我检查了响应,这很好。 If i shorten the list to 63 elements, my code ends without any problems. 如果我将列表缩短到63个元素,那么我的代码将毫无问题地结束。 Any suggestions how to handle this? 有什么建议如何处理吗?

Thx for your help 谢谢你的帮助

Update - here is the stacktrace: 更新-这是堆栈跟踪:

   org.xmlpull.v1.XmlPullParserException: unterminated entity ref (position:START_TAG <dashboard name='ABC 2012 Character Comparison (Cluster Top 5)'>@12:14965 in java.io.InputStreamReader@a9404f80)
        at org.kxml2.io.KXmlParser.readEntity(KXmlParser.java:1203)
        at org.kxml2.io.KXmlParser.readValue(KXmlParser.java:1385)
        at org.kxml2.io.KXmlParser.parseStartTag(KXmlParser.java:1109)
        at org.kxml2.io.KXmlParser.next(KXmlParser.java:369)
        at org.kxml2.io.KXmlParser.next(KXmlParser.java:310)
        at org.simpleframework.xml.stream.PullReader.read(PullReader.java:105)
        at org.simpleframework.xml.stream.PullReader.next(PullReader.java:89)
        at org.simpleframework.xml.stream.NodeReader.readElement(NodeReader.java:111)
        at org.simpleframework.xml.stream.InputElement.getNext(InputElement.java:216)
        at org.simpleframework.xml.core.CompositeList.populate(CompositeList.java:169)
        at org.simpleframework.xml.core.CompositeList.read(CompositeList.java:120)
        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.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:543)
        at org.simpleframework.xml.core.Persister.read(Persister.java:521)
        at org.simpleframework.xml.core.Persister.read(Persister.java:426)

Here is the response: 这是响应:

<?xml version="1.0" encoding="UTF-8" ?>
<response>
<loggedIn>true</loggedIn>
<errorMessage></errorMessage>
<firstName>Homer Jay</firstName>
<lastName>Simpson</lastName>
<email>abc@def.com</email>
<userId></userId>
<assignedDashboards>
<dashboard name="ABC 2012 Opponent Comparison (Table Top 5)" 
guid="d37e8537-16bc-44db-af13-5e12bca509a2" groupName="Global ABC"
groupDescription="" groupExpanded="NO" id="62" dashboardGroupId="10" />
<dashboard name="DEF 2012 Character Comparison (Jerry & Tom)"
guid="3624215a-7d27-406f-a9cb-b25663462aa4" groupName="Global ABC" 
groupDescription="" groupExpanded="NO" id="68" dashboardGroupId="10" />
</assignedDashboards>
</response>

Here is the class to map: @Root(name="response") public class ResponseDashboardList { 这是要映射的类:@Root(name =“ response”)公共类ResponseDashboardList {

@Element(name="loggedIn")
private String loggedIn;

@Element(name="errorMessage", required = false)
private String errorMessage;

@Element(name="firstName")
private String firstName;

@Element(name="lastName")
private String lastName;

@Element(name="email")
private String email;

@Element(name="userId")
private String userId;

@ElementList (required = false)
private List<Dashboard> assignedDashboards;

The command to parse the file: 解析文件的命令:

ResponseDashboardList responseDashboardList = serializer.read(ResponseDashboardList.class, file); ResponseDashboardList responseDashboardList = serializer.read(ResponseDashboardList.class,文件);

Hard to say without more details, but look for ampersands in your data in the last (37?) elements. 没有更多细节很难说,但是要在数据的最后(37?)个元素中查找“&”号。

It's probably them getting through unescaped, which XML parsers will interpret as the start of an entity (see predefined entities in XML for more background on entities). 可能是他们经历了未转义的过程,XML解析器会将其解释为实体的开始(有关实体的更多背景,请参阅XML中的预定义实体)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM