使用xsd将xhtml解组为字符串

时间:2012-01-21 19:08:41

标签: xhtml xsd jaxb

我正在尝试使用XSD和jaxb解组大型xhtml文档。我有一切工作,除了一个部分,其中包含纯HTML。这是我得到的xhtml的一个例子(我能够抓住除“内容”之外的所有元素):

<feed xmlns="http://www.w3.org/2005/Atom">
<title type="text">...</title>
<id>...</id>
<updated>...</updated>
<entry>
    <id>...</id>
    <title type="text">...</title>
    <updated>...</updated>
    <author>
        <name>...</name>
    </author>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
        <div>{html...}<div>{html...}</div>/<div>/<div>
    </content>
</entry>
</feed>

这是xsd文件的扩展:

<xsd:complexType name="ApCategoriesJAXB" >
    <xsd:sequence>
        <xsd:element name="id" type="xsd:string" minOccurs="1" maxOccurs="1"></xsd:element>
        <xsd:element name="title" type="xsd:string" minOccurs="1" maxOccurs="1"></xsd:element>
        <xsd:element name="updated" type="xsd:string" minOccurs="1" maxOccurs="1"></xsd:element>
        <xsd:element name="link" type="tns:ApLinkJAXB" minOccurs="0"></xsd:element>
        <xsd:element name="entry" type="tns:ApEntryJAXB" minOccurs="0" maxOccurs="unbounded"></xsd:element>
    </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="ApEntryJAXB">
    <xsd:sequence>
        <xsd:element name="id" type="xsd:string" minOccurs="1" maxOccurs="1"></xsd:element>
        <xsd:element name="name" type="xsd:string" minOccurs="0"></xsd:element>
        <xsd:element name="title" type="xsd:string" minOccurs="1" maxOccurs="1"></xsd:element>
        <xsd:element name="updated" type="xsd:string" minOccurs="1" maxOccurs="1"></xsd:element>
        <xsd:element name="author" type="tns:ApAuthorJAXB" minOccurs="0"></xsd:element>  
        <xsd:element name="link" type="tns:ApLinkJAXB" minOccurs="0"></xsd:element>
        <xsd:element name="category" type="tns:ApCategoryJAXB" minOccurs="0"></xsd:element>  
        <xsd:element name="content" type="tns:ApContentJAXB" minOccurs="0"></xsd:element>            
    </xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ApCategoryJAXB" >
    <xsd:sequence></xsd:sequence>
    <xsd:attribute name="term" type="xsd:string" />
    <xsd:attribute name="label" type="xsd:string" />
    <xsd:attribute name="scheme" type="xsd:string" />
</xsd:complexType>

<xsd:complexType name="ApContentJAXB" >
    <xsd:sequence>
        <xsd:element name="div" type="tns:ApDivJAXB" minOccurs="0" maxOccurs="unbounded"></xsd:element>
    </xsd:sequence>
</xsd:complexType>    

<xsd:complexType name="ApDivJAXB" >
    <xsd:sequence>
        <xsd:any namespace="http://www.w3.org/2005/Atom" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
</xsd:complexType>

我已经尝试过嵌套的xsd元素,complexTypes,xsd:any等的所有组合,无论我尝试什么,它都无法获得这个“内容”值。我很高兴将所有html作为字符串,或者将其解组为对象。

提前感谢您的任何想法。

**我编辑了xsd部分以包含相关部分。我已经尝试在“div”complexType中嵌套“any”元素,以及完全跳过“div”complexType。

再次感谢。

1 个答案:

答案 0 :(得分:0)

如果您希望<content>具有xsd:string类型,则需要对HTML进行编码或以其他方式转义。您可以使用CDATA部分,Base64编码或转义所有实体(例如<&lt;等)。

否则,xsd:any应该有效。您是否可以在尝试时提供更完整的XSD示例?