所以,我有一个XML文件,我想阅读它并获取客户端实体(由id& name标识)并将它们添加到列表中并进一步对它们执行一些操作。我的XML看起来像:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<clients>
<entity class="Domain.Client">
<field name="id" type="java.lang.String" value="1"/>
<field name="name" type="java.lang.String" value="Bia"/>
</entity>
<entity class="Domain.Client">
<field name="id" type="java.lang.String" value="2"/>
<field name="name" type="java.lang.String" value="Ana"/>
</entity>
读取XML的代码如下:
public List<Client> loadEntities() {
List<Client> entities = new ArrayList<>();
XmlHelper docXml = new XmlHelper();
Document document = docXml.loadDocument(fileName); // this function returns a Document
document.getDocumentElement().normalize();
Element root = document.getDocumentElement();
NodeList clients = root.getChildNodes();
for (int i=0; i < clientElements.getLength(); i++)
{
Node clientElement = clientElements.item(i);
if (clientElement.getNodeType() != Node.ELEMENT_NODE)
{
// ignoring element due to wrong node type
continue;
}
Element client = (Element) clientElement;
String name = client.getElementsByTagName("name")
.item(i)
.getTextContent();
int id = Integer.parseInt(client.getElementsByTagName("id")
.item(i)
.getTextContent());
Client newClient = new Client(id, name);
entities.add(newClient);
}
return entities;
}
但是,我得到&#34; java.lang.NullPointerException&#34; ......有人可以帮忙吗?
答案 0 :(得分:1)
getElementsByTagName
的Javadoc说:
以文档顺序返回具有给定标记名称的所有元素的NodeList,并包含在文档中。
您有没有元素,标记名称为 name ,标记名称是<
之后的名称。
您有<entity>
和<field>
个标记名称。
要访问名称 属性的值,您可以执行以下操作(未经测试的代码)
NodeList cNodeList = root.getElementsByTagName("field");
for(int i = 0; i < cNodeList.getLength(); ++i) {
Node cNode = cNodeList.item(i);
Node dAttribute = cNode.getAttributes().getNamedItem("name");
String nameValue = dAttribute.getNodeValue()
System.out.println(nameValue);
}
通常,在出现异常时发布完整的堆栈跟踪。
edit2 :我修复了示例代码,现在它应该按预期工作。
NodeList entityNodeList = xmlDoc.getDocumentElement().getElementsByTagName("entity");
for(int i = 0; i < entityNodeList.getLength(); ++i) {
String name = null;
int id = 0;
// Read all fields in the entity
Element entity = (Element) entityNodeList.item(i);
NodeList entityFields = entity.getElementsByTagName("field");
for (int j = 0; j < entityFields.getLength(); ++j) {
Node fieldNode = entityFields.item(j);
Node dAttribute = fieldNode.getAttributes().getNamedItem("name");
String attributeName = dAttribute.getNodeValue();
System.out.println(attributeName);
if (attributeName.equals("id")) {
id = Integer.parseInt(fieldNode.getAttributes().getNamedItem("value").getNodeValue());
}
if (attributeName.equals("name")) {
name = fieldNode.getAttributes().getNamedItem("value").getNodeValue();
}
}
System.out.println("name=" + name + ", id=" + id);
此输出
id
name
name=Bia, id=1
id
name
name=Ana, id=2