Java getAttribute()返回空字符串
我试图访问XML文件中的所有元素。这是文件的一部分(其余只是更多的和弦元素)Java getAttribute()返回空字符串,java,xml,xml-parsing,Java,Xml,Xml Parsing,我试图访问XML文件中的所有元素。这是文件的一部分(其余只是更多的和弦元素) C E G D F A. 这是我的java代码。它将打印出除属性值之外的所有内容,因此我认为getAttribute返回的是空字符串,但我不知道为什么 public static void main(String [] args){ try{ File fXmlFile = new File("/home/Ryan/workspace/ChoraleGenerator/Chords.xml"
C
E
G
D
F
A.
这是我的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();
}
}
publicstaticvoidmain(字符串[]args){
试一试{
File fXmlFile=new文件(“/home/Ryan/workspace/ChoraleGenerator/Chords.xml”);
DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder=dbFactory.newDocumentBuilder();
documentdoc=dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
System.out.println(“根元素:+doc.getDocumentElement().getNodeName());
NodeList nList=doc.getElementsByTagName(“Chord”);
System.out.println(“-------------------------------”;
对于(int i=0;i
最后,这里是我的输出:
根元素:和弦列表
当前元素:和弦 和弦名称:I 注1: 注2: 注3: 当前元素:和弦 和弦名称:ii 注1: 注2: 注3:
有什么建议吗?提前谢谢 对没有属性的节点使用
getAttribute
方法
您可能希望使用的是getTextContent()
方法
以下是属性与文本的示例:
<nodeName attribute0="value0" attribute1="value1">textContent</nodeName>
textContent
是错误的,因为
Note1
不是属性,而是
元素下面的元素。您将需要获取此元素,然后获取该元素中的文本节点。当然这不起作用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"));
这当然行不通
Note1
、Note2
和Note3
不是属性。它们是元素。元素类中没有类似于getChildElementsByTagName
的方法
// 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"));