如下图所示,P-PORT-PROTOTYPE 为xml文件中的节点,在任意位置,
用dom4j去解析该xml文件,如何直接定位到此节点,获取到xml文件中有多少个P-PORT-PROTOTYPE节点,然后ORT-PROTOTYPE下的SHORT-NAME的值
如下图所示,P-PORT-PROTOTYPE 为xml文件中的节点,在任意位置,
用dom4j去解析该xml文件,如何直接定位到此节点,获取到xml文件中有多少个P-PORT-PROTOTYPE节点,然后ORT-PROTOTYPE下的SHORT-NAME的值
private static String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<root>\n" +
"\t<root1>\n" +
"\t\t<name>\n" +
"\t\t\t<P-PORT-PROTOTYPE>\n" +
"\t\t\t\t <SHORT-NAME>NAME1</SHORT-NAME>\n" +
"\t\t\t\t <PROVIDED-INTERFACE-TREF>TREF1</PROVIDED-INTERFACE-TREF>\n" +
"\t\t\t</P-PORT-PROTOTYPE>\n" +
"\t\t</name>\n" +
"\t\t<ports>\n" +
"\t\t\t<P-PORT-PROTOTYPE>\n" +
"\t\t\t\t <SHORT-NAME>NAME1</SHORT-NAME>\n" +
"\t\t\t\t <PROVIDED-INTERFACE-TREF>TREF1</PROVIDED-INTERFACE-TREF>\n" +
"\t\t\t</P-PORT-PROTOTYPE>\n" +
"\t\t\t<P-PORT-PROTOTYPE>\n" +
"\t\t\t\t<SHORT-NAME>NAME2</SHORT-NAME>\n" +
"\t\t\t\t<PROVIDED-INTERFACE-TREF>TREF2</PROVIDED-INTERFACE-TREF>\n" +
"\t\t\t</P-PORT-PROTOTYPE>\n" +
"\t\t\t<P-PORT-PROTOTYPE>\n" +
"\t\t\t\t<SHORT-NAME>NAME3</SHORT-NAME>\n" +
"\t\t\t\t<PROVIDED-INTERFACE-TREF>TREF3</PROVIDED-INTERFACE-TREF>\n" +
"\t\t\t</P-PORT-PROTOTYPE>\n" +
"\t\t\t<P-PORT-PROTOTYPE>\n" +
"\t\t\t\t<SHORT-NAME>NAME4</SHORT-NAME>\n" +
"\t\t\t\t<PROVIDED-INTERFACE-TREF>TREF4</PROVIDED-INTERFACE-TREF>\n" +
"\t\t\t</P-PORT-PROTOTYPE>\n" +
"\t\t</ports>\n" +
"\t</root1>\n" +
"</root>";
public static void main(String[] args) throws Exception{
//将xml字符串转为Document对象
Document document = DocumentHelper.parseText(xmlStr);
//获取根节点 root节点
Element rootElement = document.getRootElement();
Map<String,Element> map = new HashMap<String,Element>();
List<String> list = new ArrayList<String>();
getE("P-PORT-PROTOTYPE",rootElement,map);
System.out.println("匹配上"+map.size()+"个P-PORT-PROTOTYPE节点信息");
for (String s : map.keySet()){
System.out.println(s + "节点路径下的信息如下:");
List<Element> elements = map.get(s).getParent().elements("P-PORT-PROTOTYPE");
System.out.println("P-PORT-PROTOTYPE节点个数为:"+elements.size());
for(Element e : elements){
for(Element e1 : e.elements()){
System.out.println(e1.getName() + "========" + e1.getTextTrim());
}
}
}
}
/**
* 匹配指定元素
* @param EName 目标元素
* @param element 根元素
* @param map 存放匹配上的元素集合
*/
public static void getE(String EName, Element element, Map<String,Element> map){
if(element.hasMixedContent() && !element.getName().equals(EName)){
List<Element> elements = element.elements();
for(Element e : elements){
getE(EName,e,map);
}
}else if (element.getName().equals(EName)){
map.put(element.getPath(),element);
}
}