创建具有多个子元素的XML文件

时间:2017-04-21 06:56:38

标签: java xml

我在ArrayList对象中有XML元素的值。我必须使用以下具有子节点元素的结构来创建XML文件。

数字,名称和级别分别添加到arraylist对象alNumber,alName和alLevel。值按以下顺序添加到arraylist对象。

Data_Update();
adjust_PWM();

__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, pulse_width);
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, pulse_width);

.......

以下应该是XML文件的输出:

alNumber.get(1)=0000000042
alName.get(1)=Test Part2
alLevel.get(1)=1
alNumber.get(2)=0000000022
alName.get(2)=Test3243
alLevel.get(2)=1
alNumber.get(3)=0000000061
alName.get(3)=testpartsub
alLevel.get(3)=1
alNumber.get(4)=0000000083
alName.get(4)=testpartsub4
alLevel.get(4)=2

这是我的代码:

<?xml version="1.0" encoding="UTF-8"?>
<node name="Test Par1" number="0000000041">
   <node name="Test Part2" number="0000000042"/> //Level - 1
   <node name="Test3243" number="0000000022"/>
   <node name="testpartsub" number="0000000061">
        <node name="testpartsub4" number="0000000083"/>  //<Level -2 
        <node name="testpartsub1" number="0000000081">
            <node name="Test1" number="0000000001"/>    //Level -3
            <node name="Testpartsub3" number="0000000082">
                <node name="Test2" number="0000000021"/>   //Level - 4
            </node>
        </node>
    </node>
   <node name="testpartsub2" number="0000000062"/>
   <node name="Test Part4" number="0000000044">
        <node name="testpart4sub1" number="0000000084"/>
   </node>
   <node name="Test Part3" number="0000000043">
        <node name="Test Part5" number="0000000045"/>
        <node name="Test Part6" number="0000000046">
            <node name="Test334344" number="0000000047"/>
            <node name="Test Part4" number="0000000044">
                <node name="testpart4sub1" number="0000000084"/>
            </node>
        </node>
   </node>
   <node name="Testpartsub3" number="0000000082">
      <node name="Test2" number="0000000021"/>
   </node>
</node>

2 个答案:

答案 0 :(得分:1)

谢谢奥本兰。它以这种方式工作n级。

for (int i = 0; i < alNumber.size(); i++) {
    int currentLevel = alLevel.get(i);
    Element node = xmlDocument.createElement("node");
    node.setAttribute("number", alNumber.get(i));
    node.setAttribute("name", alName.get(i));

    int levelDifference = previousLevel - currentLevel + 1;

    while(levelDifference > 0 ) {
        elementStack.remove(elementStack.size() - 1);
        levelDifference--;
    }

    if(i == 0) {
        xmlDocument.appendChild(node);
    } else {
        Element parentElement = elementStack.get(currentLevel - 1);
        parentElement.appendChild(node);
        elementStack.set(currentLevel - 1,  parentElement);
    }
    elementStack.add(node);
    previousLevel = currentLevel;
    }

答案 1 :(得分:0)

我认为您的代码无法正常工作,因为您正在描述问题的第1级和第2级的特殊情况。现在你必须添加代码来处理级别3和4,依此类推。但关于1337级的是什么?你想为1337级的每个级别编写额外的代码吗?我不这么认为。尝试提取最常见的场景:

我是n级的XML元素。有一个新元素要添加到级别m。

要添加新元素,我必须走到级别上方的元素,应添加新元素。所以级别为m - 1.将添加新元素,之后我将成为级别m上的新元素。

您可以使用getParentNode()升级一级。

所以你需要两个嵌套的for循环。第一个迭代你的列表,第二个 应该用n - (m - 1)级别。

从root-element开始,n = 0。