如何解决通过 StAX 解析时元素返回为 NULL
我正在尝试读取 XML 文件元素的属性,为此我使用了 jdom2 和 Stax 库。
private String readIncludeAll(String filePath) throws JDOMException,IOException,XMLStreamException {
String includeAll = null;
Document document = getStAXParsedDocument(filePath);
Element rootNode = document.getRootElement();
logger.info("ROOT: "+rootNode );
List <Element> children=rootNode.getChildren();
for(int i=0;i<children.size();i++){
logger.info("CHILDREN:" +children.get(i).toString());
}
Element includeElement=rootNode.getChild("includeAll");
logger.info("INCLUDE ELEMENT: "+includeElement);
// includeAll=includeElement.getAttributeValue("path");
//logger.info("VALOR DE PATH: "+includeAll);
return includeAll;
}
private Document getStAXParsedDocument(final String fileName) throws JDOMException,FileNotFoundException,XMLStreamException {
XMLInputFactory factory = XMLInputFactory.newFactory();
XMLEventReader reader = factory.createXMLEventReader(new FileReader(fileName));
StAXEventBuilder builder = new StAXEventBuilder();
return builder.build(reader);
}
我尝试在控制台中打印根元素的子元素,而 includeAll 确实是根元素的子元素。为什么它被返回为 NULL?
ROOT: [Element: <databaseChangeLog [Namespace: http://www.liquibase.org/xml/ns/dbchangelog]/>]
CHILDREN:[Element: <includeAll [Namespace: http://www.liquibase.org/xml/ns/dbchangelog]/>]
INCLUDE ELEMENT: null
解决方法
使用带有本地名称和命名空间 http://www.jdom.org/docs/apidocs/org/jdom2/Element.html#getChild(java.lang.String,%20org.jdom2.Namespace) 的 getChild
重载,即 rootNode.getChild("includeAll",Namespace.get("http://www.liquibase.org/xml/ns/dbchangelog"))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。