java - 在 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 类。
解决方案
SAX 只是一个事件流,因此您应该以某种方式维护处理程序状态以实现所需的逻辑。例如这里有一堆布尔标志
如何在 Java 中解析 SAX Parser 中的嵌套元素?
在您的问题中不清楚您的目标到底是什么。如果你只想在输出中缩进标签,你可以有一个用于缩进的整数变量,所以你可以在元素开始时递增它并在元素结束时递减它。
尝试找到一些教程并遵循它,例如这里https://www.informit.com/articles/article.aspx?p=26351&seqNum=5
推荐阅读
- c# - C# - 将用户批量添加到 AD 组时出现问题
- python - Python discord bot 跳过代码或停止工作
- python - 运行 sys.meta_path[2].find_distributions() 时出现 Python OSError(pytest 需要)
- mongodb - Mongodb 使用嵌套查找聚合复杂文档
- vue.js - VueJS 前端/管理屏幕
- python - Python嵌套字典通过特定子键访问
- reactive-programming - Quarkus 叛变 - 缺少对 Web 客户端的 OAuth2 支持
- jestjs - Jest & React 测试库:如何访问 getAllByText() 的元素
- python-3.x - [SSL:CERTIFICATE_VERIFY_FAILED]
- reactjs - 如何存储日期选择器中的日期?