Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java getAttribute()返回空字符串_Java_Xml_Xml Parsing - Fatal编程技术网

Java getAttribute()返回空字符串

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"

我试图访问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"));