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

默认情况下防止JAXB解组器转义特殊字符

长孙淳
2023-03-14

我有一个XML文件,其中包含一个带有特殊字符或转义字符的元素。当我将该文件解组为Java对象时,JAXB会自动转义这些字符。但是,我不希望转义它们,应该用XML文件中存在的任何值填充对象。我的XML文件片段如下所示:

            <Order>
                  <name>Order One &gt;</name>
                  <price>50</price>
            <Order>

我的JAXB订单类如下所示:

            @XmlAccessorType(XmlAccessType.FIELD)
            @XmlRootElement(name = "Order")
            public class Order{

                 @XmlElement
                 private String name;

                 @XmlElement
                 private String price;

                 //skipping getter and setter for brevity

在解组时,Order类对象的名称字段的值为“Order one”

我知道将这个值放在CDATA中的解决方案,这样它就不会被转义,但是我正在解组的XML文件来自外部源,我无法控制该文件。我在网上读到一个解决方案,建议在哪里寻找

我是新来的JAXB的世界,并试图找到我的脚。我想做的事情以前可能已经做过了,但我还没有找到解决办法。关于使用JAXB转义字符,SO上有几种解决方案,但是几乎所有的解决方案都涉及编组。任何帮助都将不胜感激。

共有1个答案

师曦
2023-03-14

你不能直接用JAXB来实现这一点。至少,JAXB的MOXy和RI实现利用底层解析器来处理XML。当他们得到数据时,数据已经被忽略了。您应该寻找一个SAX或StAX解析器,该解析器允许禁用unescaping,并将其与JAXB一起使用,以获得您想要的行为。

或者,您可以实现一个XmlAdapter,它将解组器上的字符转义为封送器上的未转义字符。

 类似资料:
  • 问题内容: 当前,当我发出此SQL时,它将获得不同的用户名。 我有一些不同的用户名,它们代表组,例如。 我想将所有其他用户名(恰好是数字)分组为一个组,例如 我可以实现以下目标吗? 编辑:从答案修改的查询 问题答案: @bfavaretto很好(对他+1),但是如果您不了解前缀或前缀不同,则可以使用类似以下内容的方法:

  • 问题内容: 请看下面的简化示例: 这打印出来,但我希望所选的html部分照原样打印:。我如何告诉jsoup不要转换’<’符号? 问题答案: 可以使用jsoup。 使用jSoup 1.8.3,可以使用保留原始html的Parser.unescapeEntities方法。 在某些以前的版本中,不存在此方法。 从此链接了解更多信息。

  • 我最近在我的Mac上安装了anaconda2。默认情况下,Conda配置为在我打开新的终端会话时激活基本环境。 我想访问Conda命令(即,我想将Conda的路径添加到我的,Conda在初始化时会这样做,这样就可以了)。 但是,我通常不使用python编程,我也不希望Conda在默认情况下激活基本环境。 当第一次从提示符执行时,Conda将以下内容添加到我的: 如果我注释掉整个块,那么我不能激活任

  • 为什么它抛出一个错误?任何帮助都将不胜感激 编辑:

  • 正如我们所看到的,一个反斜杠 "\" 是用来表示匹配字符类的。所以它是一个特殊字符。 还存在其它的特殊字符,这些字符在正则表达式中有特殊的含义。它们可以被用来做更加强大的搜索。 这里是包含所有特殊字符的列表:[ \ ^ $ . | ? * + ( )。 现在并不需要尝试去记住它们 —— 当我们分别处理其中的每一个时,你自然而然就会记住它们。 转义 如果要把特殊字符作为常规字符来使用,只需要在它前面

  • 问题是,有时属性值包含需要对此处指定的整个过滤器进行转义的特殊字符: https://msdn.microsoft.com/en-us/library/aa746475(v=vs.85). aspx 和此处指定的专有名称ATITBUTE值: https://msdn.microsoft.com/en-us/library/aa366101(v=vs.85). aspx 为了实现这一点,服务必须执行