我有一个简单的.xml
文件,需要解析它。该文件如下:
<table name="agents">
<row name="agent" password="pass" login="agent" ext_uid="133"/>
</table>
我需要获取name, password, login, ext_uid
的值才能创建数据库记录。
我为此做了什么:
创建了or.w3c.dom.Document
:
public Document getDocument(String fileName){
DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
f.setValidating(false);
DocumentBuilder builder = f.newDocumentBuilder();
return builder.parse(new File(fileName));
}
接下来我试图打印值:
document = getDocument(fileName);
NodeList nodes = document.getChildNodes();
for (int i=0; i<nodes.getLength(); i++){
Node node = nodes.item(i);
if(node.getNodeType() == Node.ELEMENT_NODE){
NodeList listofNodes = node.getChildNodes();
for(int j=0; j<listofNodes.getLength(); j++){
if(node.getNodeType() == Node.ELEMENT_NODE){
Node childNode = listofNodes.item(j);
System.out.println(childNode.getNodeValue()+" " + childNode.getNodeName());
}
}
}
}
我使用此功能是因为我试图了解如何获取值:childNode.getNodeValue()+" " + childNode.getNodeName()
但结果如下:
#text
null row
#text
在第一种和第三种情况下,NodeValue是空的,在第二种情况下它是null,这意味着,我想根本没有NodeValue。
所以我的问题是如何获得name, password, login, ext_uid
的价值?
答案 0 :(得分:2)
childNode.getNodeValue()显然为null,因为它是一个空标记。你必须寻找属性
Node childNode = listofNodes.item(j);
Element e = (Element)childNode;
String name = e.getAttribute("name");
String password= e.getAttribute("password");
String login= e.getAttribute("login");
String ext_uid= e.getAttribute("ext_uid");
答案 1 :(得分:1)
if any(IPv4Address(unicoded) in ipaddress.IPv4Network(address) for address \
in ip4addressBlocks):
元素没有值,它只有属性。如果它有一个值,它看起来更像<row>
。
获取数据的一种方法是迭代XML节点属性,例如:
<row>this would be the value returned from getNodeValue()</row>
由于示例XML文件中的回车符(NamedNodeMap attrs = childNode.getAttributes();
if (attrs != null) {
for (int k = 0; k < attrs.getLength(); k++) {
System.out.println("Attribute: "
+ attrs.item(k).getNodeName() + " = "
+ attrs.item(k).getNodeValue());
}
}
字符),代码的输出显示#text
,根据规范,应保留该文件。示例输出中的\n
是来自无值null
元素的空节点值。
答案 2 :(得分:1)
改为使用XPath:
XPath xp = XPathFactory.newInstance().newXPath();
System.out.println(xp.evaluate("/table/row/@name", doc));
System.out.println(xp.evaluate("/table/row/@password", doc));
System.out.println(xp.evaluate("/table/row/@login", doc));
System.out.println(xp.evaluate("/table/row/@ext_uid", doc));