我有一个字符串作为输入。字符串为“ XML文件格式”-
<Tag1 F1="V1" F2="V2" F3="V3" F4="V4"/>
<Tag2
F1="V1"
F2="V2"
F3="V3" F4="V4"/>
<Tag3
F1="V1"
F2="V2"
F3="V3" F4="V4"
F5="V5"
/>
字段的位置及其各自的值可以在同一行中,也可以在另一行中。
我需要编写一个Java代码,将该字符串作为输入,并从头到尾解析每个TAG,并将其字段和值保存在新的HashMap键值对中,以用于遇到的每个Tag。
我希望输出为-
HashMap 1 for Tag1 -
(F1, V1), (F2, V2), (F3, V3), (F4, V4).
HashMap 2 for Tag2 -
(F1, V1), (F2, V2), (F3, V3), (F4, V4).
HashMap 3 for Tag3 -
(F1, V1), (F2, V2), (F3, V3), (F4, V4).
Imp-字段和值可以在不同的行中。
任何帮助将不胜感激。
答案 0 :(得分:0)
我用Dom4j和Jaaxen写了一个简单的解决方案,我还为您的文档添加了一个根,如果您愿意,可以在处理输入后将其删除:
package com.aissaoui.iqbal.xml.utils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
public class Main {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
sb.append("<root><Tag1 F1=\"V1\" F2=\"V2\" F3=\"V3\" F4=\"V4\"/><Tag2 ");
sb.append(" F1=\"V1\" ");
sb.append(" F2=\"V2\" ");
sb.append(" F3=\"V3\" F4=\"V4\"/><Tag3 ");
sb.append(" F1=\"V1\" ");
sb.append(" F2=\"V2\" ");
sb.append(" F3=\"V3\" F4=\"V4\"");
sb.append(" F5=\"V5\"");
sb.append("/></root>");
String text = sb.toString();
try {
Document document = DocumentHelper.parseText(text);
String xPath = "/root/*";
List<Node> list = document.selectNodes(xPath);
Map<String,String> map = new HashMap<>();
for(Node n:list){
System.out.println("Tag: " + n.getName());
Map<String,String> hmAttributes = new HashMap<>();
List<Attribute> lAttributes = ((Element) n).attributes();
for(Attribute attr:lAttributes){
hmAttributes.put(attr.getName(), attr.getValue());
}
System.out.println("Attributes: " + hmAttributes.toString());
}
} catch (DocumentException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
依赖项:
<!-- https://mvnrepository.com/artifact/jaxen/jaxen -->
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>