我有一个 xml 字符串,我对其进行了解组,但它只返回第一部分。我相信我的 while 循环不正确。
while(xsr.hasNext()){
if(xsr.isStartElement() && "list".equals(xsr.getLocalName())) {
break;
}
xsr.next();
}
我的 Xml 字符串与此类似 -
<list><name>Ben_1</name><assign>trac</assign></list><list><name>John</name><assign>task</assign></list>
当我从邮递员那里发出 get 请求时,它只返回
{
"list": {
"name": "Ben_1",
"assign": "trac"
}
}
我尝试了这些(和其他)帖子中的方法 - JAXB 使用命名空间和前缀进行解组
我期望的答案应该是
{
"list": [
{
"name": "Ben_1",
"assign": "trac"
},
{
"name": "John",
"assign": "task"
}
]
}
在此 XML 中没有一个顶级元素。有两个
list
元素:
<list>
<name>Ben_1</name>
<assign>trac</name>
</list>
<list>
<name>John</name>
<assign>task</name>
</list>
在此 XML 中,有一个顶级元素
lists
:
<lists>
<list>
<name>Ben_1</name>
<assign>trac</name>
</list>
<list>
<name>John</name>
<assign>task</name>
</list>
</lists>
如果您将其绘制为树结构,它将是一棵树,而对于前面的示例,每个
list
将有一棵树:一个“森林”。 XMLStreamReader
需要一棵树,而不是一片森林。
import java.io.StringReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.stream.StreamSource;
String xml = "<lists><list><name>Ben_1</name><assign>trac</assign></list>" +
"<list><name>John</name><assign>task</assign></list></lists>";
var xif = XMLInputFactory.newInstance();
var xsr = xif.createXMLStreamReader(new StreamSource(new StringReader(xml)));
while (xsr.hasNext()) {
if (xsr.hasText()) {
System.out.println(xsr.getText());
}
xsr.next();
}
考虑到“森林”XML,此代码将抛出一个
XMLStreamException
,其中包含消息“根元素后面的文档中的标记必须格式正确”。当它到达第二个 <list>
标签时,但给定“树”XML,它将输出:
Ben_1
trac
John
task
我不知道你打算如何处理这些数据,但这应该可以让你超越当前所困的点。