背景知识:
saveFilePath
是用户已通过JFileChooser选择的位置
selectedElement
是一个字符串,它是从组合框中选择的值
NodeList selectedElementList = doc.getElementsByTagName(selectedElement);
返回在XML文件中找到的与从comboBox中选择的元素匹配的所有元素。
我尝试做的是从所选元素中获取所有子元素,例如获得元素A&乙
<selectedElement>
<a> AA </a>
<b> BB </b>
</selectedElement>
<selectedElement>
<a> AB </a>
<b> BC </b>
</selectedElement>
然后查找selectedElement
的所有实例以及与其关联的所有子元素以打印到文件中。请注意selectedElement
很可能是文档根元素的子元素。
这是我到目前为止所做的,fileWriter.append(a + "," + + newline);
打印出XML文件中所有选定元素的出现,但我似乎无法弄清楚如何让它打印出子元素及其值。
这就是我所拥有的:
try {
// Make a file writer that uses the location entered
fileWriter = new FileWriter(saveFilePath);
fileWriter.append(selectedElement + "," + newline);
// For each occurance of the element
for (int k = 0; k < selectedElementList.getLength(); k++) {
// Add the value of it to the CSV file
String a = selectedElementList.item(k).getTextContent();
fileWriter.append(a + "," + newline);
// for (int l = 0; l < a.getLength(); l++) {
//
//
// String item = element.getNodeName().toString();
// String item2 = element.getNodeValue();
//
// System.out.println("The node name is: " + item + newline);
// System.out.println("The node VALUE is: " + item2 + newline);
// }
}
// Close the fileWriter stream
fileWriter.flush();
fileWriter.close();
// Disable the create button and enable the open button
createButton.setEnabled(false);
openButton.setEnabled(true);
} catch (IOException e) {
e.printStackTrace();
}
也许我需要创建仅包含所需XML的第二个文档?或者getElementsByTagName不是正确的使用方法?我basicalla想要获取所选元素的子节点!
任何帮助将不胜感激
我发布了整件事,但它的长度为320行,这只是我小应用程序的众多部分之一:)
答案 0 :(得分:0)
我想我有一个解决方案,使用名为&#34; dynamic data projection&#34; (披露:我是该项目的附属机构)。但我改变你的XML是有意义的(添加了根元素并给所选元素赋予了不同的名称,所以我可以选择其中一个)。这是我的XML版本:
<root>
<selectedElement>
<a> AA </a>
<b> BB </b>
</selectedElement>
<selectedElement>
<a> AB </a>
<b> BC </b>
</selectedElement>
</root>
以下是该计划:
public class ExtractElement {
public interface Projection {
interface SelectedElement {
@XBRead("name()")
String getName();
@XBRead(".")
String getValue();
}
@XBRead("//{0}/*")
List<SelectedElement> getSelectedElements(String name);
}
public static void main(String[] args) throws IOException {
Projection projection = new XBProjector().io().url("resource://data.xml").read(Projection.class);
for (SelectedElement se:projection.getSelectedElements("selectedElement")) {
System.out.println("Found element with name "+se.getName()+" and value "+se.getValue());
}
}
}
打印出来:
Found element with name a and value AA
Found element with name b and value BB
Found element with name a and value AB
Found element with name b and value BC
这是你喜欢的吗?
答案 1 :(得分:0)
通过执行以下操作来解决此问题:
// For each occurance of the element
for (int k = 0; k < selectedElementList.getLength(); k++) {
// Add the value of it to the CSV file
String a = selectedElementList.item(k).getTextContent();
fileWriter.append(a + "," + newline);
//log.append(a + "," + newline);
NodeList temp = selectedElementList.item(k).getChildNodes();
for(int l = 0; l < temp.getLength(); l++) {
Node tempNode = temp.item(l);
if (tempNode.hasChildNodes()) {
String tnodeName = tempNode.getNodeName();
log.append("tNodeName is: " + tnodeName.toString() + newline);
}
}
}