我首先要说的是我对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()+", ");
答案 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>