我第一次为我的作业解析 XML 文件。我遇到了一个可能很愚蠢的问题,但我找不到问题所在。有些作品是法语的,因为这是我的主要语言。这是我遇到问题的代码片段。因此,通过最后几行代码,我可以打印需要发送给构造函数的信息。public void ParseXML(File fichierXML){ final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); { try { final DocumentBuilder builder = factory.newDocumentBuilder(); final Document document = builder.parse(fichierXML); final Element racine = document.getDocumentElement(); final NodeList racineNoeuds = racine.getChildNodes(); final int nbRacineNoeuds = racineNoeuds.getLength(); // Adjusting XML file document.getDocumentElement().normalize(); // Printing out the main node System.out.println("Racine (root) : " + racine.getNodeName()); for (int i = 0; i<nbRacineNoeuds; i++) { if(racineNoeuds.item(i).getNodeType() == Node.ELEMENT_NODE) { final Element sousSection = (Element) racineNoeuds.item(i); System.out.println("Sous-section : " + sousSection.getNodeName()); final NodeList usines = sousSection.getElementsByTagName("usine"); final int nbUsinesElements = usines.getLength();现在,每当我从尝试将注释分配给字符串变量的行中删除注释时,如果我检查调试器,我可以看到它们是空的。我不明白为什么,因为他们之前只打印了一行。所以很明显,当我尝试将字符串转换为 int 时,我遇到了错误,因为变量为空。
1 回答
梵蒂冈之花
TA贡献1900条经验 获得超5个赞
您的“usine”元素出现在两个部分中 - 元数据和模拟。完整输出如下所示:
Racine : configuration
Sous-section : metadonnees
usine-matiere
usine-aile
usine-moteur
usine-assemblage
entrepot
Sous-section : simulation
usine-matiere
11
32
32
usine-aile
21
320
32
usine-assemblage
41
160
192
entrepot
51
640
192
usine-matiere
13
544
576
usine-matiere
12
96
352
usine-moteur
31
320
352
当调试器在断点处停止代码时,每次“命中”给定行时它都会停止。前 5 个命中包括来自“metadonnes”的元素,如输出中所示 - 因此这里没有问题,因为来自“metadonnes”的元素不包含 x、y 和 id 属性。您需要跳过前 5 步才能在调试器中获取所需的数据。
您需要做什么来忽略那些“空”条目 - 只需忽略“metadonnes”节点中的所有内容即可。其中一种方法是仅在解析“模拟”部分时进入检索 x、y 和 id 属性的循环。
for(int j = 0; "simulation".equals(sousSection.getNodeName()) && j<nbUsinesElements; j++) {
此修改将允许您跳过“模拟”节点中不存在的任何内容
添加回答
举报
0/150
提交
取消