我想打印根节点的子元素。这是我的XML文件。
<?xml version="1.0"?>
<!-- Comment-->
<company>
<staff id="1001">
<firstname>yong</firstname>
<lastname>mook kim</lastname>
<nickname>mkyong</nickname>
<salary>100000</salary>
</staff>
<staff id="2001">
<firstname>low</firstname>
<lastname>yin fong</lastname>
<nickname>fong fong</nickname>
<salary>200000</salary>
</staff>
</company>
根据我的理解,根节点是“公司”,其子节点必须是“职员”和“职员”(因为存在“职员”节点2次)。但是,当我尝试通过我的Java代码获取它们时,我得到了5个子节点。3个额外的文本节点从哪里来?
Java代码:
package com.training.xml;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class ReadingXML {
public static void main(String[] args) {
try {
File file = new File("D:\\TestFile.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(file);
doc.getDocumentElement().normalize();
System.out.println("root element: " + doc.getDocumentElement().getNodeName());
Node rootNode = doc.getDocumentElement();
System.out.println("root: " + rootNode.getNodeName());
NodeList nList = rootNode.getChildNodes();
for(int i = 0; i < nList.getLength(); i++) {
System.out.println("node name: " + nList.item(i).getNodeName() );
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
输出:
root element: company
root: company
node name: #text
node name: staff
node name: #text
node name: staff
node name: #text
为什么三个文本节点要过来?
为什么三个文本节点要过来?
它们是子 元素 之间的空白。如果只需要子元素,则应忽略其他类型的节点:
for (int i = 0;i < nList.getLength(); i++) {
Node node = nList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
System.out.println("node name: " + node.getNodeName());
}
}
或者,您可以将文档更改为没有该空格。
或者,您可以使用其他XML API,使您可以轻松地仅索要元素。(DOM API在各种方面都很痛苦。)
如果只想忽略元素内容空白,则可以使用Text.isElementContentWhitespace
。
我想打印根节点的子元素。这是我的XML文件。 根据我的理解,根节点是“company”,其子节点必须是“staff”和“staff”(因为有两个“staff”节点)。但是当我试图通过java代码获取它们时,我得到了5个子节点。3个额外的文本节点来自哪里? Java代码: 输出: 为什么这三个文本节点会出现在这里?
问题很简单:从这里: 我必须分析一下: 这意味着每个属性都应该成为一个新的根节点。但对我来说,最困难的是我不能从“属性”中设置“属性”值作为对象节点名称。 这对我来说是个挑战。我可以在根节点中设置新节点。已经从“attributes”中获得了一个映射,然后尝试使用forEach对它们进行迭代,以便将结果放入一个节点中,但如图所示,我必须使用“property”将其设置为对象名称的键,然后获取值并设
我需要以下xslt代码方面的帮助。我的意见如下: 我的预期输出为: 我曾尝试使用*/text()获取值节点的值,但我只从第一个孩子获得文本。将来我有很多这样的子元素。 提前谢谢。 你好,Minakshi
我有一个XML文档,它包含一个非常复杂(对我来说)的结构,没有换行符。它有许多具有类似结构的元素: 我需要得到节点值的文本,这是节点成员的孩子也有孩子的名字与特定的文本(在这种情况下virtual_size)。也有可能存在几个类似的节点。我可以用[1]etc吗? 这让我知道了节点的名称,但是如何达到“值”节点呢?
我正在寻找下面输入和输出XML的XSLT(1.0)代码。 在输出XML中,C6元素下可以有任何子节点。在下面的XML中,我放了CN元素,但它可以是任何名称。 输入XML- 所需的输出XML- 先谢谢你。
如果我没弄错的话,树通常是一个列表,其中的元素按特定顺序排列。孩子们不在他们自己的子列表中,他们都在同一个列表中。 所以,我试图创建一个Tree类,其中包含TreeNodes(类)使用Tree类中的List。 我如何跟踪父母/孩子/叶子?如果父母“父母1”,有两个孩子“孩子A”和“孩子B”,我如何将他们联系在一起?