如何使用Java解析字符串xml以返回所有遍历路径
我试图解析一个xml字符串,以返回从根到深度的所有遍历路径。 请帮忙满足我的要求 我的xml字符串如下所示:如何使用Java解析字符串xml以返回所有遍历路径,java,xml,xml-parsing,sax,stax,Java,Xml,Xml Parsing,Sax,Stax,我试图解析一个xml字符串,以返回从根到深度的所有遍历路径。 请帮忙满足我的要求 我的xml字符串如下所示: <levels> <level> <id>123</id> <name>Leave Review by Manager</name> <task>Review by Manager</task> <clauses&g
<levels>
<level>
<id>123</id>
<name>Leave Review by Manager</name>
<task>Review by Manager</task>
<clauses>
<clause>
<id>123</id>
<name>Leave Review By Manager</name>
<role>123</role>
<users>
<user>
<id>abcd@xyz.com</id>
<name>ABC D</name>
</user>
</users>
<actions>
<action>
<id>123</id>
<name>Approved</name>
<type>Accepted</type>
<caption>Approve</caption>
<level />
</action>
<action>
<id>123</id>
<name>Rejected by Manager</name>
<type>Rejected</type>
<caption>Reject</caption>
<level />
</action>
</actions>
</clause>
</clauses>
</level>
</levels>
Accepted
Approved
Approve
123
Rejected
Rejected by Manager
Reject
123
Rejected
Rejected by Manager
Reject
123
我在谷歌上搜索并进行了以下尝试,但没有得到预期的上述输出:
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
List<String> list = new ArrayList<String>();
String levelName = "";
String actionType = "";
String actionCaption = "";
String userId = "";
String actionName = "";
try {
XMLEventReader xmlEventReader = xmlInputFactory.createXMLEventReader(new FileInputStream(fileName));
while(xmlEventReader.hasNext()){
XMLEvent xmlEvent = xmlEventReader.nextEvent();
if (xmlEvent.isStartElement()){
StartElement startElement = xmlEvent.asStartElement();
if(startElement.getName().getLocalPart().equals("level")){
//Get the 'levelName' attribute from level element
Attribute idAttr = startElement.getAttributeByName(new QName("name"));
if(idAttr != null){
levelName = xmlEvent.asCharacters().getData();
}
}
//set the other varibles from xml elements
else if(startElement.getName().getLocalPart().equals("type")){
xmlEvent = xmlEventReader.nextEvent();
actionType = (xmlEvent.asCharacters().getData());
}else if(startElement.getName().getLocalPart().equals("name")){
xmlEvent = xmlEventReader.nextEvent();
actionName = (xmlEvent.asCharacters().getData());
}else if(startElement.getName().getLocalPart().equals("caption")){
xmlEvent = xmlEventReader.nextEvent();
actionCaption = (xmlEvent.asCharacters().getData());
}else if(startElement.getName().getLocalPart().equals("id")){
xmlEvent = xmlEventReader.nextEvent();
userId = (xmlEvent.asCharacters().getData());
}
}
//if level end element is reached, add all strings to list
if(xmlEvent.isEndElement()){
EndElement endElement = xmlEvent.asEndElement();
if(endElement.getName().getLocalPart().equals("level")){
list.addAll(Arrays.asList(levelName, actionType, actionName, actionCaption, userId));
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
看看StAX教程:当前输出是什么样子的?嗨。。请帮我找到解决办法。。
Accepted
Approved
Approve
123
Rejected
Rejected by Manager
Reject
123
Rejected
Rejected by Manager
Reject
123