我需要将XML的文本节点存储在HashMap中,使得键是标记名,值是Tag的内容。
我可以使用以下代码部分执行此操作。然而问题是,即使我能够获得文本节点,但我也可以获得其他(或冗余)标签。我只需要从XML中获取SimpleElements(无子元素)中的数据,并忽略complexElements(其中包含更多XML标记)。
我无法这样做,因为每当我尝试获取节点类型时,所有节点都会因某种原因返回相同的类型。
P.S。我还在学习编码,所以要慷慨:)
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();
}
}
}
答案 0 :(得分:0)
如果您不想要重复,只有在到达节点值时才可以将节点添加到地图中。这将忽略子元素,直到它们自己呈现其值。
Node child = list.item(i);
if (child.getNodeType() == Node.TEXT_NODE)
textContent.append(child.getTextContent());
}