【发布时间】:2017-05-19 09:29:22
【问题描述】:
我需要将 XML 的文本节点存储在 HashMap 中,这样键是标记名,值是标记的内容。
我可以使用下面的代码部分地做到这一点。然而问题是,即使我能够获得文本节点,但我也获得了其他(或冗余)标签。我只需要从 XML 中的 SimpleElements(无子元素)获取数据,并忽略 complexElements(其中包含更多 XML 标签)。
我无法做到这一点,因为每当我尝试获取节点类型时,由于某种原因,所有节点都会返回相同的类型。
附注我还在学习编程,所以要慷慨:)
public class TextNodes {
private static HashMap<String, String> printNote(NodeList a) {
HashMap<String, String> map = new HashMap<String, String>();
for (int i = 0; i < a.getLength(); i++) {
Node x = a.item(i);
if (x.hasChildNodes() == true) {
int y = 1;
String key = x.getNodeName();
String tempkey = "";
if (map.containsKey(key)) {
do {
y++;
tempkey = key + "_" + y;
} while (map.containsKey(tempkey) == true);
map.put(tempkey, x.getTextContent().trim());
tempkey = "";
} else {
map.put(key, x.getTextContent().trim());
}
}
}
return map;
}
public static void main(String[] args) {
try {
File input = new File("test1.txt");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(input);
doc.getDocumentElement().normalize();
Element ele = doc.getDocumentElement();
HashMap<String, String> map = new HashMap<String, String>();
if (doc.hasChildNodes()) {
map = printNote(ele.getElementsByTagName("*"));
}
System.out.println(map.keySet());
} catch (Exception e) {
e.printStackTrace();
}
}
}
【问题讨论】:
标签: java xml dom xml-parsing