我正在尝试取消封送包含CDATA元素的XML。 我得到的字符串仍然具有 CDATA"包装器"。 我已经使用XJC从XSD创建Java类,它们在jmish.jaxb
包中。 我正在使用Oracle(Sun的(Java 7 JDK中包含的JAXB。
XSD 中定义Product
元素的部分是:
<xs:element name="Product" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element ref="Specifications" minOccurs="0" maxOccurs="1" />
<xs:element name="Description" type="xs:string" minOccurs="1" maxOccurs="1" msdata:Ordinal="1" />
</xs:sequence>
<xs:attribute name="name" type="xs:string" />
<xs:attribute name="imageFile" type="xs:string" />
</xs:complexType>
</xs:element>
XML 的一个片段是:
<Product name="Allure_444" imageFile="Allure_444_Ivory.jpg">
<Description>![CDATA[444 Ivory]]</Description>
</Product>
解组代码是:
JAXBContext jc = JAXBContext.newInstance( "jmish.jaxb" );
Unmarshaller u = jc.createUnmarshaller();
Catalog catalog = (Catalog)u.unmarshal( new FileInputStream( "bin/ProductCatalog.xml" ) );
解组(并将我的下移动到任何Product
节点(后,如果我调用product.getDescription()
,我会得到:
[CDATA[444 Ivory]]
不:
444 Ivory
如果 CDATA 包含任何字符实体,则会正确替换它们(因此任何<
都变为<
(。
为什么 CDATA 包装器会保留? 在我在这个网站和其他网站上看到的每个示例中,它们在解组期间都会被删除。 这一定是一个简单的问题,但我只是没有看到它。
<Product name="Allure_444" imageFile="Allure_444_Ivory.jpg">
<Description>![CDATA[444 Ivory]]</Description>
</Product>
这不是有效的 CDATA 包装器。它应该看起来像这样:
<Product name="Allure_444" imageFile="Allure_444_Ivory.jpg">
<Description><![CDATA[444 Ivory]]></Description>
</Product>
您需要修复生成 XML 的任何内容以提供正确的语法。