当前位置: 首页 > 面试题库 >

Java:编组对象—在xml中删除额外的ns2注释

李建中
2023-03-14
问题内容

我试图将对象内的数据编组为基于已定义架构的xml文件。但是,当我打印出xml文件时,我会在xml标签上收到额外的注释。有什么办法摆脱多余的命名空间注释(即ns2)

这是我从编组中收到的xml的示例。

<?xml version="1.0" encoding="UTF-8" standalone="yes">
<root xmlns:ns2="http://www.something.com/something">
    <ns2:food>steak</ns2:food>
    <ns2:beverage>water</ns2:beverage>
</root>

我想要的是这样的:

<?xml version="1.0" encoding="UTF-8" standalone="yes">
<root xmlns="http://www.something.com/something">
    <food>steak</food>
    <beverage>water</beverage>
</root>

这是我的Java代码正在做的事情:

            JAXBContext context = JAXBContext.newInstance("com.schema");
            JAXBElement<FoodSchema> element = new JAXBElement<FoodSchema>
                (new QName("FoodSchema"), Food.class, foodSchema);
            Marshaller marshaller = context.createMarshaller();
            OutputStream os = new FileOutputStream(object.getFilePath());
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
            marshaller.marshal(element, os);

任何帮助深表感谢!谢谢!


问题答案:

通过向QName用于构造JAXB元素的名称空间添加URI名称空间URI(“
http://www.something.com/something”),并利用包级@XmlSchema注释,将为您提供所需的名称空间限定:

包装信息

@XmlSchema(
    namespace="http://www.something.com/something", 
    elementFormDefault=XmlNsForm.QUALIFIED)
package forum7014746;

import javax.xml.bind.annotation.*;

餐饮

package forum7014746;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Food {

    private String food;
    private String beverage;

    public String getFood() {
        return food;
    }

    public void setFood(String food) {
        this.food = food;
    }

    public String getBeverage() {
        return beverage;
    }

    public void setBeverage(String beverage) {
        this.beverage = beverage;
    }

}

演示版

package forum7014746;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Marshaller;
import javax.xml.namespace.QName;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jaxbContext = JAXBContext.newInstance(Food.class);

        Food foodSchema = new Food();
        foodSchema.setFood("steak");
        foodSchema.setBeverage("water");

        JAXBElement<Food> element = new JAXBElement<Food> (new QName("http://www.something.com/something","FoodSchema"), Food.class, foodSchema);

        Marshaller marshaller = jaxbContext.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(element, System.out);
    }

}

输出量

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<FoodSchema xmlns="http://www.something.com/something">
    <beverage>water</beverage>
    <food>steak</food>
</FoodSchema>


 类似资料:
  • 有没有办法删除KML文件中额外的命名空间前缀(即ns2)? 这是我从代码中收到的 kml 的一个示例: 我想要的是这样的: 这是我的java代码: 非常感谢任何帮助!谢谢!

  • 我有一个带有声明的XML文件,需要使用XSLT将其删除,用于我使用的样式表版本=“2.0” 我拥有的xml文件(输入) 我需要的输出

  • 有没有办法从一个巨大的xml文件中删除注释( 两者,根元素前的注释 和内的注释 最好的解决方案是使用xPath。我试过了 它适用于DOM,但不适用于vtd xml 这是我选择评论的代码 但此处的屏幕上打印的是nothing。 有没有办法用vtd xml做到这一点? 谢谢你的帮助。

  • 问题内容: 给定一个n个对象数组,假设它是一个string数组,并且具有以下值: 如何删除/删除数组中所有等于“ a”的字符串/对象? 问题答案: [如果需要一些现成的代码,请滚动到我的“ Edit3”(剪切后)。其余的供后代使用。] 为了充实清洁工的想法: 编辑:我现在使用而不是:单例仅限于一个条目,而该方法允许你添加其他字符串以稍后过滤:。 Edit2:以上方法保留了相同的数组(因此数组的长度

  • 问题内容: 如果满足条件,我需要从中删除一些对象,我想知道哪种方法会更有效。 情况如下:我有一个包含包含其他一些对象的类。我必须对此进行迭代,并删除满足特定条件的所有元素。据我所知,这些是我要删除的选项: 创建一个新的并添加不符合条件的元素。迭代之后,从旧的数组列表交换到没有元素的新数组列表。 创建一个新的并添加满足条件的元素。迭代后,使用传递要删除对象的方法。 有没有更有效的方法从中删除对象?

  • 我有一个5页的pdf文件,每页有一个表,我需要提取。我需要从每一页提取所有的表,并将它们保存为数据帧文件,所有使用python,所以我转换了文件,使用tabula的csv文件 文件输出的主要问题。csv是指有几个额外的逗号。 实例 当我将csv文件转换成行/列时,我得到了一些行偏移 注意:dataframe应该有6列,其中包含空字段。我猜额外的逗号来自pdf文件中的空格。如何从csv文件中删除额外