这是我的XML文件示例:
<agregator1 id="CSP">
<id>int</id>
<type>string</type>
</agregator1>
<agregator1 id="Microgrid">
<id>int</id>
<type>string</type>
</agregator1>
我从未与DOM4J
合作,而且我已经阅读了文档,但我似乎无法将子元素纳入ArrayList
&#39; s ,我试图做以下事情:
arrayList1: id, type
arrayList2: int, string
这是我的代码:
for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
Element foo = (Element) i.next();
if(foo.attributeValue("id").toString().equals("CSP"))
{
//what am I missing here?
}
}
我搜索了很多,而且我无法找到任何解决方案,因为我无法foo.getChildNodes()
。
任何sugestions?
编辑:我需要在不使用elementText(String)
(或类似内容)的情况下获取节点名称,因为即使更改了XML文件,我也需要使用我的代码,而无需编辑代码。
答案 0 :(得分:1)
我可以帮助你解决这两个问题:
Methode 1 :选择所有元素agregator1之后,如果等于CSP,则仅验证 attributeValue。
Element root = document.getRootElement();
List<Element> listElement = root.selectNodes("./agregator1");
if (listElement != null) {
for (int j = 0; j < listElement.size(); j++) {
Element el = listElement.get(j);
String attrValue = el.attributeValue("id", "");
if (attrValue.length() > 0 && attrValue.equals("CSP")) {
// do your code
}
}
}
else {
// element not found
}
Methode 2 :仅在1行中执行此操作,使用xpath
Element rootElement = doc.getRootElement();
List<Element> elementNeeded = rootElement.selectNodes("./agregator1[@id='CSP']");
if (elementNeeded != null && elementNeeded.size() > 0) {
// element found do your code
}
else {
// element not found
}
答案 1 :(得分:0)
我解决了我的问题。感谢所有试图帮助的人。 对于所有寻找类似解决方案的人来说,这是我的代码:
这是上面的方法,完成了:
public static ArrayList<Element> readSubElements()
{
ArrayList<Element> subElements = new ArrayList<>();
Element root = configs.XMLreaderDOM4J.getDoc().getRootElement();
for (Iterator it = root.elementIterator(); it.hasNext();){
Element foo = (Element) it.next();
if(foo.attributeValue("id").equals("VPP"))
{
for (Iterator it2 = foo.elementIterator(); it2.hasNext(); )
{
Element temp = (Element) it2.next();
subElements.add(temp);
System.out.println(""+temp);
}
}
}
return subElements;
}
我创造了一种新方法:
public static void getTagNames() {
ArrayList<Element> elements = readSubElements();
ArrayList<String> list1 = new ArrayList<>();
ArrayList<String> list2 = new ArrayList<>();
setSize(elements.size());
for (Iterator it = elements.iterator(); it.hasNext();) {
Element entry = (Element) it.next();
list1.add(entry.getQualifiedName());
list2.add(entry.getText());
}
setTagNamesAL(list1);
setTagContentAL(list2);
}