在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

例如,字符和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,length));

        } else {
        } 
            
            
      
        }
    
        public void endElement(String uri,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类。

解决方法

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

How can I parse nested elements in SAX Parser in java?

不清楚您的目标是什么。 如果只想在输出中缩进标签,则可以使用一个用于缩进的整数变量,因此可以在元素开始处增加它,在元素结束处减少它。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...