gpt4 book ai didi

java - 使用 getTextContent() 时数组列表中的空字符串

转载 作者:行者123 更新时间:2023-11-30 03:32:20 28 4
gpt4 key购买 nike

所以我一直在尝试按预订顺序收集所有节点名称及其内容。因此,我使用递归方法从 XML 文件中获取所有节点以及文本。问题是每当我执行它时,我都会不断在 ArrayList 中获取空字符串。空字符串位于 Academy、Faculty 和 Department 旁边,因为它们没有文本。

我尝试从 ArrayList 中删除空字符串和 null,但没有成功,有人知道解决此问题的方法吗?谢谢!

这是 XML 文件:

<?xml version="1.0"?>
<Academy>
<Faculty>
<Department name= "Science">
<Director>Kay Jordan</Director>
<Don>ABC</Don>
</Department>
</Faculty>
</Academy>

这是 Java 代码:

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class Gen2 {

static ArrayList<String> SLDP = new ArrayList<String>(0);

public static void main(String[] args) throws SAXException, IOException,
ParserConfigurationException, TransformerException {

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document document = docBuilder.parse(new File("Test.xml"));
doSomething(document.getDocumentElement());

System.out.print("< ");
SLDP.removeAll(Arrays.asList(null," "));
for(int z =0; z<SLDP.size();z++){
System.out.print(SLDP.get(z).toString()+ " ");
}
System.out.print(" >");
}

public static void doSomething(Node node) {
// do something with the current node instead of System.out
//System.out.println(node.getNodeName());
SLDP.add(node.getNodeName());
System.out.println(node.getFirstChild().getTextContent());
SLDP.add(node.getFirstChild().getTextContent());

NodeList nodeList = node.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
Node currentNode = nodeList.item(i);
if (currentNode.getNodeType() == Node.ELEMENT_NODE) {
//calls this method for all the children which is Element
doSomething(currentNode);
}
}
}
}

最佳答案

简单的方法:在doSomething()中修剪节点名称和内容:

SLDP.add(node.getNodeName().trim());       
//System.out.print(node.getFirstChild().getTextContent());
SLDP.add(node.getFirstChild().getTextContent().trim());

不太简单:将其添加到DocumentBuilderFactory:

docBuilderFactory.setIgnoringElementContentWhitespace(true);
docBuilderFactory.setValidating(true);
docBuilderFactory.setSchema(...);

但是您需要 xml 文件的架构,以便解析器能够验证并删除不需要的空格。请参阅documentation here

关于java - 使用 getTextContent() 时数组列表中的空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28730862/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com