Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java解析字符串xml以返回所有遍历路径_Java_Xml_Xml Parsing_Sax_Stax - Fatal编程技术网

如何使用Java解析字符串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

我试图解析一个xml字符串,以返回从根到深度的所有遍历路径。 请帮忙满足我的要求

我的xml字符串如下所示:

<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