xml解析的问题,很郁闷......
//向xml文档中添加节点<出售价>39.00</出售价>
@Test
public void add()throws ParserConfigurationException, SAXException, IOException, Exception
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder =factory.newDocumentBuilder();
Document document = builder.parse("src/book.xml");
NodeList list = document.getElementsByTagName("书");
Element element = document.createElement("出售价");
element.setTextContent("39.00");
for(int i = 0; i < list.getLength();i++)
{
Element element1= (Element)list.item(i);
element1.appendChild(element);
}
//把更新后的对象树从内存写回到xml文档
TransformerFactory tffactory = TransformerFactory.newInstance();
Transformer tf = tffactory.newTransformer();
tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/book.xml")));
}
<书架>
<书>
<书名 name="eeee">java培训教程</书名>
<作者>张孝祥</作者>
<售价>109元</售价>
</书>
<书>
<书名>js网页开发</书名>
<作者>张孝祥</作者>
<售价>28.00元</售价>
</书>
</书架>
结果为什么是这样?
<?xml version="1.0" encoding="UTF-8" standalone="no"?><书架>
<书>
<书名 name="eeee">java培训教程</书名>
<作者>张孝祥</作者>
<售价>109元</售价>
</书>
<书>
<书名>js网页开发</书名>
<作者>张孝祥</作者>
<售价>28.00元</售价>
<出售价>39.00</出售价><出售价>39.00</出售价></书>
</书架>
--------------------编程问答-------------------- 上边的循环为什么没有起作用? --------------------编程问答-------------------- --------------------编程问答-------------------- Element element = document.createElement("出售价");
element.setTextContent("39.00");
创建的元素开始追加到第一个节点-书的子元素中,第二次循环就把这个元素重新赋给了第二个子结点的子元素
也就是说从原来的位置移到了新位置。所以循环结果只看到了最后一个添加成功了
再循环体内创建元素,然后追加。 --------------------编程问答--------------------
为什么第二个书后会添加两个呢? 还是不懂 --------------------编程问答--------------------
--------------------编程问答--------------------
改为:
for(int i = 0; i < list.getLength();i++)
{
Element element = document.createElement("出售价");
element.setTextContent("39.00");
Element element1= (Element)list.item(i);
element1.appendChild(element);
}
为什么不能写在外面?
补充:Java , Web 开发