Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按xml模式java中的顺序排列列表_Java_Xml_List_Arraylist - Fatal编程技术网

按xml模式java中的顺序排列列表

按xml模式java中的顺序排列列表,java,xml,list,arraylist,Java,Xml,List,Arraylist,我有这样一个xml: <?xml version="1.0" encoding="UTF-8"?> <plane> <part> <desc>qwe</desc> <qty>1</qty> </part> <part> <desc>asd</desc> <qty>1</qty> <part

我有这样一个xml:

<?xml version="1.0" encoding="UTF-8"?>
<plane>
<part>
    <desc>qwe</desc>
    <qty>1</qty>
</part>
<part>
    <desc>asd</desc>
    <qty>1</qty>
        <part>
            <desc>asdfg</desc>
            <qty>1</qty>
        </part>
        <part>
            <desc>asdfg</desc>
            <qty>4</qty>
        </part>
    </part>
<part>
    <desc>zxc</desc>
    <qty>2</qty>
</part>
<part>
    <desc>AAAA</desc>
    <qty>1</qty>
        <part>
            <desc>BBBB</desc>
            <qty>1</qty>
                <part>
                    <desc>CCCC</desc>
                    <qty>13</qty>
                        <part>
                            <desc>DDDD</desc>
                            <qty>12</qty>
                                <part>
                                    <desc>EEEE</desc>
                                    <qty>21</qty>
                                </part>
                        </part>
                </part>
                <part>
                    <desc>CCCC1111</desc>
                    <qty>13</qty>
                        <part>
                            <desc>DDDD1111</desc>
                            <qty>12</qty>
                                <part>
                                    <desc>EEEE1111</desc>
                                    <qty>21</qty>
                                </part>
                        </part>
                </part>
        </part>
        <part>
            <desc>G</desc>
            <qty>1</qty>
                <part>
                    <desc>H</desc>
                    <qty>13</qty>
                        <part>
                            <desc>I</desc>
                            <qty>12</qty>
                        </part>
                </part>
        </part>
</part>
</plane>
但实际上我想要的是:

qwe x 2
AAAA x 1
  BBBB x 1
    CCCC x 13
      DDDD x 12
        EEEE x 21
  CCCC1111 x 13
    DDDD1111 x 12
      EEEE1111 x 21
G x 1
  H x 13
    I x 12
XML到对象类:

public class XML_Converter{

private String filePath = "D:\\file.xml";
private File file = new File(filePath);

@Override
public Plane readFile() {
    try {
        JAXBContext jaxbContext = JAXBContext.newInstance(Plane.class);
        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
        Plane plane = (Plane) jaxbUnmarshaller.unmarshal(file);
        return plane;
    } catch (JAXBException e) {
        System.out.println("Unable to load file. Try again.");
    }
    return new Plane();

}
飞机类

@XmlRootElement
public class Plane {

private List<Part> planeParts = null;


@XmlElement(name="part")
public List<Part> getPlaneParts() {
    return planeParts;
}

public void setPlaneParts(List<Part> planeParts) {
    this.planeParts = planeParts;
}

@Override
public String toString() {
    return "Plane [planeParts=" + planeParts + "]";
}


}
@XmlRootElement
公务舱飞机{
私有列表planeParts=null;
@xmlement(name=“part”)
公共列表getPlaneParts(){
返回平面零件;
}
公共无效设置平面零件(列出平面零件){
此参数。平面零件=平面零件;
}
@凌驾
公共字符串toString(){
返回“平面[planeParts=“+planeParts+”]”;
}
}
零件类

public class Part {

private String desc;
private int qty;

private List<Part> listParts = null;


@XmlElement(name="desc")
public String getDesc() {
    return desc;
}

@XmlElement(name="part")
public List<Part> getListParts() {
    return listParts;
}

@XmlElement(name="qty")
public int getQty() {
    return qty;
}

public void setDesc(String desc) {
    this.desc = desc;
}

public void setListParts(List<Part> listParts) {
    this.listParts = listParts;
}

public void setQty(int qty) {
    this.qty = qty;
}

@Override
public String toString() {
    return "Part [desc=" + desc + ", qty=" + qty + ", listParts="
            + listParts + "]";
}


}
公共类部分{
私有字符串描述;
私人整数数量;
私有列表listParts=null;
@xmlement(name=“desc”)
公共字符串getDesc(){
返回描述;
}
@xmlement(name=“part”)
公共列表getListParts(){
返回列表部件;
}
@xmlement(name=“数量”)
public int getQty(){
退货数量;
}
公共void setDesc(字符串desc){
this.desc=desc;
}
公共作废setListParts(列表listParts){
this.listParts=listParts;
}
公共作废设置数量(整数数量){
该数量=数量;
}
@凌驾
公共字符串toString(){
return“Part[desc=“+desc+”,qty=“+qty+”,listParts=”
+listParts+“]”;
}
}
如何实现这一点(因此xml结构类似于代码输出)?
提前谢谢

在变量(例如r)中传递当前递归级别,并相应地打印空格数

public static void itarate(List<Part> list,int r){
    for (int i = 0; i<list.size(); i++){
        for(int j=0;j<r;j++)
           System.out.print("  ");
        System.out.println(list.get(i).getDesc() + " x " + list.get(i).getQty());
        if (list.get(i).getListParts() != null){
            itarate(list.get(i).getListParts(),r+1);

        }
    }
公共静态无效率(列表,int r){

对于(inti=0;iInclude complete code.include,如您所愿),我认为有一种方法可以在不使用递归的情况下实现这一点,但这需要更改您的XML结构。此外,我认为我可以识别这个“平面”XML结构。如果你正在做我认为你正在做的事情,那就太好了!嗯,设置为0会使循环只运行一次。设置为1会产生很多重复的内容…目前手头没有javac。将缩进内容移出循环。基本思想是你必须修改缩进b基于递归深度。您没有这样做。顺便说一句。我假设设置r=0将使循环永远不会迭代。
public class Part {

private String desc;
private int qty;

private List<Part> listParts = null;


@XmlElement(name="desc")
public String getDesc() {
    return desc;
}

@XmlElement(name="part")
public List<Part> getListParts() {
    return listParts;
}

@XmlElement(name="qty")
public int getQty() {
    return qty;
}

public void setDesc(String desc) {
    this.desc = desc;
}

public void setListParts(List<Part> listParts) {
    this.listParts = listParts;
}

public void setQty(int qty) {
    this.qty = qty;
}

@Override
public String toString() {
    return "Part [desc=" + desc + ", qty=" + qty + ", listParts="
            + listParts + "]";
}


}
public static void itarate(List<Part> list,int r){
    for (int i = 0; i<list.size(); i++){
        for(int j=0;j<r;j++)
           System.out.print("  ");
        System.out.println(list.get(i).getDesc() + " x " + list.get(i).getQty());
        if (list.get(i).getListParts() != null){
            itarate(list.get(i).getListParts(),r+1);

        }
    }