标头的Java XML打印节点

时间:2013-02-09 12:58:40

标签: java xml xml-parsing

我首先要说的是我对Java或XML不是很了解。

我在下面的代码是打印出我想要的子节点的代码。我没有编写代码,我在帮助网站上找到了它:Java XML Example。现在,我需要它做的是删除所有特异性的痕迹。这意味着我不希望它搜索“TITLE”或“CD”,我希望它找出第一个节点是什么并打印它。意思是如果第一个是CD,那么它应该打印CD,依此类推所有节点。我计划将它用于多个XML文件,但它们都不相同。这就是为什么重要的是不要特定于一个XML并使用引号。

为了让您了解我最终想要的输出,基本上是一个CSV文件。顶部的标题,由下面的逗号和内容分隔,用逗号分隔。为此,我还需要一个打印方法,列出顶部的所有节点。我不确定如何做到这一点。

编辑:我的问题是,如何在不对其进行硬编码的情况下打印标签名称(例如标题)。我希望它也可以处理与CD或音乐无关的XML文件。

//This should be the final result:
Title, Artist, Album,
On Fire, Eminem, Recovery,
Not Afraid, Eminem, Recovery,

//I want this code without hardcoding headers like Title inside it. 
Element fstElmnt = (Element) fstNode;
NodeList fstNmElmntLst = fstElmnt.getElementsByTagName("TITLE");
Element fstNmElmnt = (Element) fstNmElmntLst.item(0);
NodeList fstNm = fstNmElmnt.getChildNodes();
System.out.print(((Node) fstNm.item(0)).getNodeValue()+", ");

2 个答案:

答案 0 :(得分:1)

问题的答案就在于此。使用getChildNodes(),并遍历返回列表中的节点。对于每个节点,您可以使用

检查它是否为元素
if (node.getNodeType() == Node.ELEMENT_NODE)

如果为true,您可以使用

获取元素的标记名称
Element element = (Element) node; 
String elementName = element.getTagName();

答案 1 :(得分:1)

完全与元素名称无关的代码:

boolean titlePrinted = false;
Element root = doc.getDocumentElement();
NodeList cdNodes = root.getChildNodes();
for (int i = 0; i < cdNodes.getLength(); i++) {
    Node cdNode = cdNodes.item(i);
    if (cdNode.getNodeType() == Node.ELEMENT_NODE) {
        NodeList cdAttrNodes = cdNode.getChildNodes();
        if (!titlePrinted) {
            for (int j = 0; j < cdAttrNodes.getLength(); j++) {
                Node cdAttrNode = cdAttrNodes.item(j);
                // add this if statement
                if (cdAttrNode.getNodeType() == Node.ELEMENT_NODE) {
                    System.out.print(cdAttrNode.getNodeName() + ",");
                }
            }
            System.out.println("");
            titlePrinted = true;
        }
        for (int j = 0; j < cdAttrNodes.getLength(); j++) {
            Node cdAttrNode = cdAttrNodes.item(j);
            if (cdAttrNode.getNodeType() == Node.ELEMENT_NODE) {
                NodeList attrNodes = cdAttrNode.getChildNodes();
                for (int k = 0; k < attrNodes.getLength(); k++) {
                    Node attrNode = attrNodes.item(k);
                    if (attrNode.getNodeType() == Node.TEXT_NODE) {
                        System.out.print(attrNode.getNodeValue() + ",");
                    }
                }
            }
        }
        System.out.println("");
    }
}

根据您的建议.xml进行测试。我的解决方案使用节点而不是元素来独立。<​​/ p>