我正在尝试访问XML文件中的所有元素。这是文件的一部分(其余部分只是更多的和弦元素)
<?xml version="1.0" encoding="UTF-8"?>
<Chord-List>
<Chord name = "I">
<Note1>C</Note1>
<Note2>E</Note2>
<Note3>G</Note3>
</Chord>
<Chord name = "ii">
<Note1>D</Note1>
<Note2>F</Note2>
<Note3>A</Note3>
</Chord>
</Chord-List>
这是我的java代码。它将打印除属性值之外的所有内容,因此我认为getAttribute返回一个空字符串,但我不确定为什么
public static void main(String [] args){
try{
File fXmlFile = new File("/home/Ryan/workspace/ChoraleGenerator/Chords.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
System.out.println("Root element: " + doc.getDocumentElement().getNodeName());
NodeList nList = doc.getElementsByTagName("Chord");
System.out.println("----------------------------");
for(int i = 0; i < nList.getLength(); i++){
Node nNode = nList.item(i);
System.out.println("\nCurrent Element:" + nNode.getNodeName());
if(nNode.getNodeType() == Node.ELEMENT_NODE){
Element eElement = (Element)nNode;
System.out.println("Chord name: " + eElement.getAttribute("name"));
System.out.println("Note 1: " + eElement.getAttribute("Note1"));
System.out.println("Note 2: " + eElement.getAttribute("Note2"));
System.out.println("Note 3: " + eElement.getAttribute("Note3"));
}
}
}catch(Exception e){
e.printStackTrace();
}
}
最后,这是我的输出: 根元素:Chord-List
当前元素:和弦
和弦名称:我
注1:
注2:
注3:
当前元素:和弦
和弦名称:ii
注1:
注2:
注3:
有什么建议吗?提前谢谢!
答案 0 :(得分:2)
当然这不起作用。 Note1
,Note2
和Note3
不是属性。他们是元素。
这个怎么样:
// Define a helper method
private static String getChildElementContent(Element e, String childName) {
NodeList children = e.getElementsByTagName(childName);
if(children.getLength() > 0) {
return children.item(0).getTextContent();
}
return "";
}
然后做:
System.out.println("Note 1: " + getChildElementContent(eElement, "Note1"));
System.out.println("Note 2: " + getChildElementContent(eElement, "Note2"));
System.out.println("Note 3: " + getChildElementContent(eElement, "Note3"));
答案 1 :(得分:1)
您对没有属性的节点使用getAttribute
方法。
您可能想要使用的是getTextContent()
方法。
以下是属性与文字的示例:
<nodeName attribute0="value0" attribute1="value1">textContent</nodeName>
答案 2 :(得分:0)
eElement.getAttribute("Note1")
错误,因为Note1
不是属性,而是<Chord>
元素下面的元素。您将需要获取此元素,然后获取该元素中的文本节点。