根据标签值对Java列表中的XML行进行排序

Stacksamus

我有一个加载了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

icza

这是一个完整的解决方案。

首先,我定义2个非常简单的类来表示XML中的数据:WrapperMainTag包装器仅将MAIN_TAG元素包装在所需的列表中JAXBMainTag班刚成立的公共属性,正是因为出现在输入。

读取输入后,我将按任意选择的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据列的值对Laravel中的行进行排序?

熊猫:根据列的值对行进行排序

根据列表中的值对字典进行排序

根据整数对SQL中的行进行排序

根据字符串标签对列表中的对象进行排序

根据日期在jquery和handlebar中对列表标签进行排序

根据值中列表的值进行字典排序

根据字符串值的类型对熊猫中的行进行排序

根据特定列中的值对数据框行进行排序

根据另一行中的值对Excel行进行排序

如何让 Google 表格根据其中一列中的值自动对行进行排序?

如何根据列中的值对数据框的行进行重新排序

如何根据最小值对行进行排序并在 Pandas 中替换它们?

如何在Spark Java中根据其值对列表进行排序?

根据java中的double值对字符串列表进行排序

根据列对行进行排序?

根据对象字段的分组对列表进行排序,根据组中的最大值进行排序

根据列表 B 的值对包含对值 (Key,Value) 的列表 A 进行排序,该值是列表 A 中对的值

如何根据元组列表中的值对元组进行排序

根据嵌套字典中的值对列表进行排序

如何根据在jtable中动态添加的列对行进行排序?

根据每行中的字段数对行进行排序

根据数据框中的变量组对行进行排序

根据时间戳对文件中的行进行排序

根据bash中的模式对文件行进行排序

如何根据Google表格中的背景颜色对行进行排序

根据元素值对列表进行排序

如何根据列值对列表进行排序

根据键的值对列表进行排序