【问题标题】:How to unmarshal an XML containing a CDATA section within a CDATA in Java?如何在 Java 的 CDATA 中解组包含 CDATA 部分的 XML?
【发布时间】:2013-12-02 13:44:11
【问题描述】:

我有一个 XMl,其中包含一个包含嵌套 CDATA 节的 CDATA 节。在这种情况下应该如何进行解组。这在Java中可能吗? 提前致谢。

【问题讨论】:

  • 一个简单的示例文档将有助于理解您的问题。

标签: java xml cdata unmarshalling


【解决方案1】:

不,无法解组此类文档,因为该文档无效。例如:

<?xml version="1.0" ?>
<foo>
  <bar><![CDATA[This should contain a nested cdata, which <![CDATA[Contains another CDATA]]>]]></bar>
</foo>

解析失败,因为字符序列]]&gt; 只能用于标记CDATA 部分的结尾。简而言之,您不能嵌套 CDATA 部分。你必须想出另一种方法。

请参阅wikipedia articlethis question and answers 了解更多信息。

【讨论】:

    【解决方案2】:

    JAXB 框架正是您所寻找的。 JAXB 代表 Java Architecture for XML Binding。

    JAXB object has the capability of Marshaling and UnMarshaling. 
    

    这并不复杂。去吧:)

    根据您的问题,

    您可以通过具有多级类结构来做到这一点。 例如:

    假设你有两个类:

    class A
    {
      (@xmlName : CDATA1)
      B obj;
    }
    
    class B
    {
      (@xmlName : CDATA2)
      String string;
    }
    

    当您在 A 类对象的上下文中解组时。

    内部 CDATA 将落在 objstring 成员中。

    希望这会有所帮助。

    【讨论】:

    • 我知道 JAXB,但真正的问题是是否可以在 CDATA 中解组包含 CDATA 的 XML。使用 SAXParser,我无法这样做,因为它在嵌套 CDATA 上失败:(
    • Sameer:感谢您的及时回复。即使这样,SAXBuilder 在使用 SAXBuilder 上的 build() 构建文档本身时也会引发异常。
    • @VipinPillai - 你能发布你看到的异常吗?
    猜你喜欢
    • 2016-09-24
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多