我有一个加载了XML行的列表,可以按照以下顺序以任何顺序...
<MAIN_TAG>
<TAG_ONE>22</TAG_ONE>
<TAG_TWO>2</TAG_TWO>
<TAG_THREE>junk</TAG_THREE>
<TAG_FOUR>8888</TAG_FOUR>
<TAG_FIVE>arcdf</TAG_FIVE>
<TAG_SIX>more junk</TAG_SIX>
</MAIN_TAG>
<MAIN_TAG>
<TAG_ONE>3</TAG_ONE>
<TAG_TWO>2</TAG_TWO>
<TAG_THREE>junk</TAG_THREE>
<TAG_FOUR>522</TAG_FOUR>
<TAG_FIVE>00561</TAG_FIVE>
<TAG_SIX>more junk</TAG_SIX>
</MAIN_TAG>
<MAIN_TAG>
<TAG_ONE>10</TAG_ONE>
<TAG_TWO>2</TAG_TWO>
<TAG_THREE>junk</TAG_THREE>
<TAG_FOUR>200</TAG_FOUR>
<TAG_FIVE>ggggg</TAG_FIVE>
<TAG_SIX>more junk</TAG_SIX>
</MAIN_TAG>
<MAIN_TAG>
<TAG_ONE>1</TAG_ONE>
<TAG_TWO>2</TAG_TWO>
<TAG_THREE>junk</TAG_THREE>
<TAG_FOUR>951</TAG_FOUR>
<TAG_FIVE>56756</TAG_FIVE>
<TAG_SIX>more junk</TAG_SIX>
</MAIN_TAG>
<MAIN_TAG>
<TAG_ONE>35</TAG_ONE>
<TAG_TWO>2</TAG_TWO>
<TAG_THREE>junk</TAG_THREE>
<TAG_FOUR>071</TAG_FOUR>
<TAG_FIVE>ds15s</TAG_FIVE>
<TAG_SIX>more junk</TAG_SIX>
</MAIN_TAG>
<MAIN_TAG>
<TAG_ONE>2</TAG_ONE>
<TAG_TWO>2</TAG_TWO>
<TAG_THREE>junk</TAG_THREE>
<TAG_FOUR>071</TAG_FOUR>
<TAG_FIVE>34534</TAG_FIVE>
<TAG_SIX>more junk</TAG_SIX>
</MAIN_TAG>
<MAIN_TAG>
<TAG_ONE>40</TAG_ONE>
<TAG_TWO>2</TAG_TWO>
<TAG_THREE>junk</TAG_THREE>
<TAG_FOUR>45</TAG_FOUR>
<TAG_FIVE>4rsss</TAG_FIVE>
<TAG_SIX>more junk</TAG_SIX>
</MAIN_TAG>
<MAIN_TAG>
<TAG_ONE>42</TAG_ONE>
<TAG_TWO>2</TAG_TWO>
<TAG_THREE>junk</TAG_THREE>
<TAG_FOUR>35</TAG_FOUR>
<TAG_FIVE>cdsss</TAG_FIVE>
<TAG_SIX>more junk</TAG_SIX>
</MAIN_TAG>
<MAIN_TAG>
<TAG_ONE>20</TAG_ONE>
<TAG_TWO>2</TAG_TWO>
<TAG_THREE>junk</TAG_THREE>
<TAG_FOUR>10</TAG_FOUR>
<TAG_FIVE>dssss</TAG_FIVE>
<TAG_SIX>more junk</TAG_SIX>
</MAIN_TAG>
<MAIN_TAG>
<TAG_ONE>30</TAG_ONE>
<TAG_TWO>2</TAG_TWO>
<TAG_THREE>junk</TAG_THREE>
<TAG_FOUR>1</TAG_FOUR>
<TAG_FIVE>dsdfe</TAG_FIVE>
<TAG_SIX>more junk</TAG_SIX>
</MAIN_TAG>
我希望能够根据用户传递的标签对该Java列表进行排序。因此,以下内容将通过传入以按“ TAG_ONE”进行排序进行排序...
<MAIN_TAG>
<TAG_ONE>1</TAG_ONE>
<TAG_TWO>2</TAG_TWO>
<TAG_THREE>junk</TAG_THREE>
<TAG_FOUR>951</TAG_FOUR>
<TAG_FIVE>56756</TAG_FIVE>
<TAG_SIX>more junk</TAG_SIX>
</MAIN_TAG>
<MAIN_TAG>
<TAG_ONE>2</TAG_ONE>
<TAG_TWO>2</TAG_TWO>
<TAG_THREE>junk</TAG_THREE>
<TAG_FOUR>071</TAG_FOUR>
<TAG_FIVE>34534</TAG_FIVE>
<TAG_SIX>more junk</TAG_SIX>
</MAIN_TAG>
<MAIN_TAG>
<TAG_ONE>3</TAG_ONE>
<TAG_TWO>2</TAG_TWO>
<TAG_THREE>junk</TAG_THREE>
<TAG_FOUR>522</TAG_FOUR>
<TAG_FIVE>00561</TAG_FIVE>
<TAG_SIX>more junk</TAG_SIX>
</MAIN_TAG>
<MAIN_TAG>
<TAG_ONE>10</TAG_ONE>
<TAG_TWO>2</TAG_TWO>
<TAG_THREE>junk</TAG_THREE>
<TAG_FOUR>200</TAG_FOUR>
<TAG_FIVE>ggggg</TAG_FIVE>
<TAG_SIX>more junk</TAG_SIX>
</MAIN_TAG>
<MAIN_TAG>
<TAG_ONE>20</TAG_ONE>
<TAG_TWO>2</TAG_TWO>
<TAG_THREE>junk</TAG_THREE>
<TAG_FOUR>10</TAG_FOUR>
<TAG_FIVE>dssss</TAG_FIVE>
<TAG_SIX>more junk</TAG_SIX>
</MAIN_TAG>
<MAIN_TAG>
<TAG_ONE>22</TAG_ONE>
<TAG_TWO>2</TAG_TWO>
<TAG_THREE>junk</TAG_THREE>
<TAG_FOUR>8888</TAG_FOUR>
<TAG_FIVE>arcdf</TAG_FIVE>
<TAG_SIX>more junk</TAG_SIX>
</MAIN_TAG>
<MAIN_TAG>
<TAG_ONE>30</TAG_ONE>
<TAG_TWO>2</TAG_TWO>
<TAG_THREE>junk</TAG_THREE>
<TAG_FOUR>1</TAG_FOUR>
<TAG_FIVE>dsdfe</TAG_FIVE>
<TAG_SIX>more junk</TAG_SIX>
</MAIN_TAG>
<MAIN_TAG>
<TAG_ONE>35</TAG_ONE>
<TAG_TWO>2</TAG_TWO>
<TAG_THREE>junk</TAG_THREE>
<TAG_FOUR>071</TAG_FOUR>
<TAG_FIVE>ds15s</TAG_FIVE>
<TAG_SIX>more junk</TAG_SIX>
</MAIN_TAG>
<MAIN_TAG>
<TAG_ONE>40</TAG_ONE>
<TAG_TWO>2</TAG_TWO>
<TAG_THREE>junk</TAG_THREE>
<TAG_FOUR>45</TAG_FOUR>
<TAG_FIVE>4rsss</TAG_FIVE>
<TAG_SIX>more junk</TAG_SIX>
</MAIN_TAG>
<MAIN_TAG>
<TAG_ONE>42</TAG_ONE>
<TAG_TWO>2</TAG_TWO>
<TAG_THREE>junk</TAG_THREE>
<TAG_FOUR>35</TAG_FOUR>
<TAG_FIVE>cdsss</TAG_FIVE>
<TAG_SIX>more junk</TAG_SIX>
</MAIN_TAG>
但是最好选择按“ TAG_FOUR”排序。
预先感谢您的任何帮助。
Stacksamus
这是一个完整的解决方案。
首先,我定义2个非常简单的类来表示XML中的数据:Wrapper
和MainTag
。包装器仅将MAIN_TAG
元素包装在所需的列表中JAXB
。该MainTag
班刚成立的公共属性,正是因为出现在输入。
读取输入后,我将按任意选择的TAG对其进行排序(由int索引标识,TAG_ONE标识为1,TAG_TWO标识为2,等等)。排序是在将Wrapper.sort()
标签作为参数进行排序的方法中实现的。
最后,我也可以使用将结果打印到标准输出JAXB
。
输入略有修改(包装在wrapper
标签中):
<wrapper>
<MAIN_TAG>
<TAG_ONE>22</TAG_ONE>
<TAG_TWO>2</TAG_TWO>
<TAG_THREE>junk</TAG_THREE>
<TAG_FOUR>8888</TAG_FOUR>
<TAG_FIVE>arcdf</TAG_FIVE>
<TAG_SIX>more junk</TAG_SIX>
</MAIN_TAG>
<MAIN_TAG>
<TAG_ONE>3</TAG_ONE>
<TAG_TWO>2</TAG_TWO>
<TAG_THREE>junk</TAG_THREE>
<TAG_FOUR>522</TAG_FOUR>
<TAG_FIVE>00561</TAG_FIVE>
<TAG_SIX>more junk</TAG_SIX>
</MAIN_TAG>
<!-- ...and the rest which I omit here... -->
</wrapper>
Wrapper和MainTag类:
class Wrapper {
public List< MainTag > MAIN_TAG = new ArrayList<>();
public void sort(final int byTag) {
Collections.sort(MAIN_TAG, new Comparator< MainTag >() {
@Override
public int compare(MainTag m1, MainTag m2) {
switch (byTag) {
case 1: return m1.TAG_ONE.compareTo(m2.TAG_ONE);
case 2: return m1.TAG_TWO.compareTo(m2.TAG_TWO);
case 3: return m1.TAG_THREE.compareTo(m2.TAG_THREE);
case 4: return m1.TAG_FOUR.compareTo(m2.TAG_FOUR);
case 5: return m1.TAG_FIVE.compareTo(m2.TAG_FIVE);
case 6: return m1.TAG_SIX.compareTo(m2.TAG_SIX);
}
return 0;
}
});
}
}
class MainTag {
public Integer TAG_ONE;
public Integer TAG_TWO;
public String TAG_THREE;
public Integer TAG_FOUR;
public String TAG_FIVE;
public String TAG_SIX;
}
最后是如何使用它:
Wrapper w = JAXB.unmarshal(new File("input.xml"), Wrapper.class);
w.sort(1);
JAXB.marshal(w, System.out);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句