基于Java中的属性值对元素进行排序

时间:2014-10-28 12:01:50

标签: java sorting xml-attribute

我正在尝试根据Item ID对NodeList中的节点进行排序。 Xml看起来像

<Order>
 <Lines>
  <Line LineNo="1">
   <Item ID="ItemA1"/>
  </Line>
  <Line LineNo="2">
   <Item ID="ItemA4"/>
  </Line>
  <Line LineNo="3">
   <Item ID="ItemA7"/>
  </Line>
  <Line LineNo="4">
   <Item ID="ItemB3"/>
  </Line>
  <Line LineNo="5">
   <Item ID="ItemC1"/>
  </Line>
 </Lines>
</Order>

因此在排序后,xml看起来像

<Order>
 <Lines>
  <Line LineNo="1">
   <Item ID="ItemA1"/>
  </Line>
  <Line LineNo="5">
   <Item ID="ItemA4"/>
  </Line>
  <Line LineNo="4">
   <Item ID="ItemA7"/>
  </Line>
  <Line LineNo="3">
   <Item ID="ItemB3"/>
  </Line>
  <Line LineNo="2">
   <Item ID="ItemC1"/>
  </Line>
 </Lines>
</Order>

我为此写的逻辑

Map<String, Element> mapIDAndLine = new HashMap<String, Element>();
NodeList nlLine = doc.getElementsByTagName("Line");
for(int cntLine = 0 ; cntLine < nlLine.getLength() ; cntLine++){

Element elLine = (Element) elLine.item(cntLine);
Element elItem = elLine.getChildElement("Item");

String sItemID = elItem.getAttribute("ID");

if(!mapIDAndLine.containsKey(sItemID )){

   mapIDAndLine.put(sItemID , elLine);

}



}

Map<String, String> treeMap = new TreeMap<String, String>(mapIDAndLine);

我得到一张地图,其中所有键(ItemID)都已排序

现在,我可以遍历treeMap并获取相应的行,并在删除原始行后附加到doc。

如果我在这里做错了或者有更好的方法,请告诉我。

提前致谢。

0 个答案:

没有答案