首页 > 解决方案 > 在 Sax Parser JAVA 中创建层次结构

问题描述

我已经完成了一个 sax 解析器,它解析一个 xml 文件并在控制台上打印标签。

问题是他们不遵循等级制度。

看这个:

-------------------<GOT>
-------------------<character>
-------------------<id>
-------------------<name>
----------------------->Arya Stark
-------------------<gender>
----------------------->Female
-------------------<culture>
----------------------->Northmen
-------------------<born>
----------------------->In 289 AC, at Winterfell
-------------------<died>
-------------------<alive>
----------------------->TRUE
-------------------<titles>
-------------------<title>
----------------------->Princess

例如,character 和 id 处于同一级别。关于如何检测标签是否是另一个标签的任何想法?

谢谢!

public class Sax extends DefaultHandler {
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
                            System.out.println("-------------------<" + qName + ">");

          }
      
   
    public void characters(char ch[], int start, int length)
            throws SAXException {
            
            
            if( new String(ch,start,length).matches(".*[a-zA-Z0-9]+.*")){
                    System.out.println("----------------------->" + new String(ch, start, length));

        } else {
        } 
            
            
      
        }
    
        public void endElement(String uri, String localName, String qName)
            throws SAXException {
 
        System.out.println("</" + qName + ">");
 
    
    }
}

这是 sax 解析器的代码,我需要知道一种方法来检测标签是否有孩子。

我目前正在阅读有关 sax 解析器的信息,所以如果我发现我会发布它!

package sax;

 
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
 
public class ParseXMLFileSax {
 
    private static final String xmlFilePath = "got.xml";
 
    public static void main(String argv[]) {
 
        try {
 
            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser saxParser = factory.newSAXParser();
 
            saxParser.parse(xmlFilePath, new Sax());
 
        } catch (Exception e) {
            e.printStackTrace();
        }
 
    }
 
}

此类执行解析器并调用 newSaxParser 类。

标签: javasax

解决方案


SAX 只是一个事件流,因此您应该以某种方式维护处理程序状态以实现所需的逻辑。例如这里有一堆布尔标志

如何在 Java 中解析 SAX Parser 中的嵌套元素?

在您的问题中不清楚您的目标到底是什么。如果你只想在输出中缩进标签,你可以有一个用于缩进的整数变量,所以你可以在元素开始时递增它并在元素结束时递减它。

尝试找到一些教程并遵循它,例如这里https://www.informit.com/articles/article.aspx?p=26351&seqNum=5


推荐阅读