dom4j插入子节点,自动生成xmlns=""的问题,有谁遇到过,请帮忙解决,谢谢!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dom4j插入子节点,自动生成xmlns=""的问题,有谁遇到过,请帮忙解决,谢谢!相关的知识,希望对你有一定的参考价值。

谢谢各位的回答,不好意思,我的问题可能没描述清楚。
在用dom4j生成xml的时候,如果所需的xml是有命名空间的话,那么根节点的下一层节点都会自动加上 xmlns=“” , 这个问题我已经解决了。 接下来的问题是,有另一小段xml文件,我不想一个element一个elment的用dom4j来插入,而是想通过将这一小段xml一次性用dom4j读进来,然后再用dom4j插入到那段大的xml对象中。现在遇到的问题是,在插入的时候,新插入的这个Element默认的生成了 xmlns=“”,这个东西不知道如何解决,谢谢各位!

这个问题是许多初次使用dom4j生成xml文件时可能都会遇到的问题,也是在定义缺省名称空间时遇到的常见问题,解决的办法其实也很简单:如果你要为某个元素节点上定义一个缺省的名称空间,可直接在定义元素element的时候就应该为其指定一个不带前缀的名称空间,如:
element.addElement(name,url);//name为你的新定义元素节点名,URL就是你的名称空间。
当然,一般更多的是在根元素上定义缺省的名称空间,此时定义格式如下:
Element root=document.addElement(name,url);//name为你的新定义元素节点名,URL就是你的名称空间。
特别注意:不要通过类似于element.addNamspace("",url)这样的方式来为某个元素节点指定缺省名称空间,这样的做法就会出现你说描述的上述问题。
参考技术A 要读的xml文件

<?xml version="1.0" encoding="GB2312"?>
<学生花名册>
<学生 性别 = "男">
<姓名>李华</姓名>
<年龄>14</年龄>
</学生>
<学生 性别 = "男">
<姓名>张三</姓名>
<年龄>16</年龄>
</学生>
</学生花名册>
Vector students_Vector;

private Vector readXMLFile(String file) throws Exception
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dbf.newDocumentBuilder();
Document doc = builder.parse(file); // 获取到xml文件

// 下面开始读取
Element root = doc.getDocumentElement(); // 获取根元素
NodeList students = root.getElementsByTagName_r("学生");
students_Vector = new Vector();
for (int i = 0; i < students.getLength(); i++)
// 一次取得每一个学生元素
Element ss = (Element) students.item(i);

// 创建一个学生的实例
student stu = new student();
stu.setSex(ss.getAttribute("性别"));

NodeList names = ss.getElementsByTagName_r("姓名");
Element e = (Element) names.item(0);
Node t = e.getFirstChild();
stu.setName(t.getNodeValue());

NodeList ages = ss.getElementsByTagName_r("年龄");
e = (Element) ages.item(0);
t = e.getFirstChild();
stu.setAge(Integer.parseInt(t.getNodeValue()));

students_Vector.add(stu);

return students_Vector;


参照这个写

insertBefore()指定的已有子节点之前插入新的子节点

定义:

insertBefore() 方法在您指定的已有子节点之前插入新的子节点。

语法:

父级.insertBefore(新的子节点,指定的已有子节点) 

实例:

<input id="txt1" type="text"/>
<input id="btn1" type="button" value="创建li"/>
<ul id="ul1">
</ul>
window.onload=function ()
{
    var oBtn=document.getElementById(‘btn1‘);
    var oUl=document.getElementById(‘ul1‘);
    var oTxt=document.getElementById(‘txt1‘);
    oBtn.onclick=function ()
    {
        var oLi=document.createElement(‘li‘);
        var aLi=oUl.getElementsByTagName(‘li‘);
        
        oLi.innerHTML=oTxt.value;
        
        //父级.appendChild(子节点);
        if(aLi.length>0)
        {
            oUl.insertBefore(oLi, aLi[0]);
        }
        else
        {
            oUl.appendChild(oLi);
        }
    };
};

当ul中没有li时oUl.insertBefore(oLi, aLi[0]);会报错,所以判断aLi.length为0时使用oUl.appendChild(oLi);

以上是关于dom4j插入子节点,自动生成xmlns=""的问题,有谁遇到过,请帮忙解决,谢谢!的主要内容,如果未能解决你的问题,请参考以下文章

dom4j递归解析XML字符串所有子节点

dom4j 添加节点

Java - 子节点的 dom4j XPath

dom4j解析xml重复节点

怎么让 dom4j 添加的节点 在最前面``而不是最后面吗~

Java 生成xml 主节点属性问题!