我在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>
答案 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。