当前位置: 首页 > 知识库问答 >
问题:

如何在使用jaxb进行封送处理时删除额外的转义字符

宫铭
2023-03-14

原始的XML amp;由JAXB添加,需要忽略:-

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <emp>
 <address>7 stret &amp; new </address>
 <name>Naveenqq</name>
</emp>

预期无放大器;(实际价值需要):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <emp>
  <address>7 stret & new </address>
  <name>Naveenqq</name>
</emp>

我尝试了以下代码:

  private static void jaxbObjectToXML(Emp employee) throws IOException, SAXException, ParserConfigurationException 
{
    try
    { 

        JAXBContext jaxbContext = JAXBContext.newInstance(Emp.class);
        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
        //jaxbMarshaller.setProperty("jaxb.encoding", "US-ASCII"); 
        jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
        //jaxbMarshaller.setProperty(OutputKeys.ENCODING, "ASCII");
        //jaxbMarshaller.setProperty(CharacterEscapeHandler.class.getName(), new CustomCharacterEscapeHandler());
        //          jaxbMarshaller.setProperty(CharacterEscapeHandler.class.getName(), new CharacterEscapeHandler() {
        //            
        //              @Override
        //              public void escape(char[] ch, int start, int length, boolean isAttVal, Writer out) throws IOException {
        //                  out.write( ch, start, length ); 
        //                  
        //              }
        //          }); 
        //          
        //          StringWriter writer = new StringWriter();
        File file = new File("employee1.xml");
        jaxbMarshaller.marshal(employee, file); 
        //          
        //          DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        //          DocumentBuilder builder = factory.newDocumentBuilder();
        //          InputSource is = new InputSource( new StringReader( writer.toString() ) );
        //          Document doc = builder.parse( is );
        System.out.println("done::");


    } 
    catch (JAXBException e) 
    {
        e.printStackTrace();
    }
}

请帮助解决同样的问题,我已经尝试了所有的编码类型

共有2个答案

阙奇思
2023-03-14

您的期望值不是有效的XML,因此您无法说服任何感知XML的工具生成它。

为什么要尝试生成无效的XML?

姬歌者
2023-03-14

问题是

但是,如果观察JAXB解组后的值,它将被

XML:

<emp>
   <address>7 stret &amp; new</address>
   <name>Naveenqq</name>
</emp>

根目录:

@Data
@XmlRootElement(name = "emp")
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
    private String address;
    private String name;
}

主要内容:

public class Main {
    public static void main(String[] args) throws JAXBException, XMLStreamException {
        final InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("test.xml");
        final XMLStreamReader xmlStreamReader = XMLInputFactory.newInstance().createXMLStreamReader(inputStream);
        final Unmarshaller unmarshaller = JAXBContext.newInstance(Root.class).createUnmarshaller();
        final Root root = unmarshaller.unmarshal(xmlStreamReader, Root.class).getValue();
        System.out.println(root.toString());

        Marshaller marshaller = JAXBContext.newInstance(Root.class).createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.setProperty(Marshaller.JAXB_ENCODING, "US-ASCII");
        //marshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", new XmlCharacterHandler());
        marshaller.marshal(root, System.out);
    }
}

输出:

Root(address=7 stret & new, name=Naveenqq)
<?xml version="1.0" encoding="US-ASCII"?>
<emp>
   <address>7 stret &amp; new</address>
   <name>Naveenqq</name>
</emp>

正如你可以看到在输出Root(地址=7 strt

希望解释有帮助。

 类似资料:
  • 有人帮忙吗? 提前道谢。

  • 我有从一个模式创建的JAXB对象。在封送过程中,使用NS2对xml元素进行注释。对于这个问题,我已经尝试了网络上存在的所有选项,但没有一个可行。我不能修改我的模式或更改package-info.java。请帮忙

  • 我有一个关于通过JAXB封送的小问题。 当前我有一个对象的HashMap 由自定义HashMapAdapter封送的being 封送基于以下文章:http://blog.bdoughan.com/2013/06/moxys-xmlvariableNode-using-maps-key-as.html HashMap由布尔值、长值或字符串值填充。 因此,关于Blog,预期的JSON输出应该是: 西蒙

  • 问题内容: 我有一个python编辑器,用户在其中输入脚本或代码,然后将其放入幕后的主要方法中,同时还缩进每一行。问题是,如果用户具有多行字符串,则通过在每个空格中插入制表符,对整个脚本进行的缩进会影响字符串。问题脚本非常简单,例如: 因此,在main方法中,它看起来像: 并且该字符串现在在每一行的开头都有一个额外的制表符。 问题答案: 因此,如果我正确理解它,则可以接受用户输入的任何内容,对其进

  • 在代码中创建了这些类的实例之后,我调用了传递所需值的setter方法。尽管该方法的参数是Object,但其值最有可能是字符串(我无法控制它是如何定义的)。但是,为了保持一致,我将字符串转换为Object,以便它与方法的参数类型匹配。代码如下所示: 当我对Java对象进行整理时,我会在结果XML中得到以下内容,就在字符串值的前面: 我读过关于方法的参数类型和传递给它的数据类型不匹配的文章。在我的例子

  • 我正在构建一系列链接类,我希望这些类的实例能够整理成XML,这样我就可以将它们保存到一个文件中,以后再读进去。 目前我使用以下代码作为测试用例: XML输出为: 元素为空有什么原因吗?我希望它包含日期的字符串表示(即)。为了做到这一点,我需要编写一些我自己的代码吗? 的输出是: