使用JAXB marshal将新元素添加到XML文件是为其添加命名空间

时间:2017-10-03 23:15:53

标签: java xml jaxb marshalling

我有一个现有的xml文件,如下所示

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Person xmlns="http://Person">
    <name first="abc1",last="xyz1"/>
    <name first="abc2",last="xyz2"/>
</Person>

我需要动态添加名称元素。我按照以下描述实现了这个

1)解组xml文件

        InputStream inputStream = new FileInputStream(xmlFile);
        JAXBContext jaxbContext = JAXBContext.newInstance(Person.class);
        Unmarshaller u = jaxbContext.createUnmarshaller();
        JAXBElement<Person> root = (JAXBElement<Person>) u.unmarshal(xmlFile);
        Person personObj = root.getValue();

2)添加名称元素

        List<JAXBElement> nameList = personObj.getNameElement();
        Name name = new Name ();
        name.setFirst("abc3");
        name.setLast("xyz3");
        Name name1 = new Name ();
        name1.setFirst("abc4");
        name1.setLast("xyz4");      

        JAXBElement<Name> nameEle = new JAXBElement<Name>(new QName("Name"), Name.class, name);
        JAXBElement<Name> nameEle1 = new JAXBElement<Name>(new QName("Name"), Name.class, name1);

        nameList.add(nameEle);
        nameList.add(nameEle1);

3)编组文件

        JAXBContext jaxbContext = JAXBContext.newInstance(Person.class);
        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
        jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        jaxbMarshaller.marshal(personObj, newXMLFile);

现在编组的xml向新添加的元素显示命名空间。我想知道是否有办法删除此命名空间

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Person xmlns="http://Person">
    <name first="abc1",last="xyz1"/>
    <name first="abc2",last="xyz2"/>
    <name xmlns:ns2="http://Person" xmlns="" first="abc3",last="xyz3"/>
    <name xmlns:ns2="http://Person" xmlns="" first="abc4",last="xyz4"/>
</Person>

我想将名称空间保留在根元素(Person)中,因为原始xml具有根元素的名称空间

0 个答案:

没有答案