gpt4 book ai didi

java - 使用 Java 和 Xerces 访问内部 XML 数据

转载 作者:行者123 更新时间:2023-12-01 15:40:20 32 4
gpt4 key购买 nike

我正在尝试使用 Xerces 解析 XML 文档,但我似乎无法访问元素内的数据,下面是一个示例 XML 文档;

<sample>
<block>
<name>tom</name>
<age>44</age>
<car>BMW</car>
</block>
<block>
<name>Jenny</name>
<age>23</age>
<car>Ford</car>
</block>
</sample>

到目前为止,我能产生的唯一输出是;

Sample
block
name
age
car
block
name
age
car

这只是节点名称的列表。我尝试过node.getValue(),但这只是返回null,所以我猜那是错误的!

如何访问里面的数据?这是到目前为止的基础知识;

public static void display(String file) {
try{
DOMParser parser = new DOMParser();
parser.parse(file);
Document doc = parser.getDocument();
read(doc);
}
catch(Exception e){e.printStackTrace(System.err);}
}


public static void read(Node node) {
if(node == null) {return;}
int type = node.getNodeType();
//System.out.print((node));
switch (type) {
case Node.DOCUMENT_NODE: {
display_all(((Document)node).getDocumentElement());
break;
}

case Node.TEXT_NODE:

break;
case Node.ELEMENT_NODE: {

System.out.println(node.getNodeName());

NodeList child = node.getChildNodes();
if(child != null) {
int length = child.getLength();
for (int i = 0; i < length ; i++) {
display_all(child.item(i));
}
}

break;


}
}
}

最佳答案

getNodeValue() 返回您当前跳过的文本节点的值。

 public static void read(Node node) {
if (node == null) {
return;
}

int type = node.getNodeType();
switch (type) {
case Node.DOCUMENT_NODE: {
System.out.println("Doc node; name: " + node.getNodeName());
read(((Document) node).getDocumentElement());
break;
}

case Node.TEXT_NODE:
System.out.println("Text node; value: " + node.getNodeValue().replaceAll("\\s", ""));
break;

case Node.ELEMENT_NODE: {
System.out.println("Element node; name: " + node.getNodeName());
NodeList children = node.getChildNodes();
int length = children.getLength();
for (int i = 0; i < length; i++) {
read(children.item(i));
}
break;
}
}
}

我认为您可能会感到困惑的是 XML 的实际结构以及此类内容的子项是什么:

<element>
<child_element>foo</child_element>
</element>

上面的代码片段可能有助于解释。

这也是为什么 dom4j、JAXB、XPath 等使事情变得更加容易的原因。

关于java - 使用 Java 和 Xerces 访问内部 XML 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8153876/

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