将“any”与xhtml命名空间一起使用时,“不希望使用此元素”

时间:2014-02-17 09:34:49

标签: xml xsd xmllint

我有一些XML Schema的问题。我需要在我的XML文件中放入一些HTML代码,然后我发现xs:any会有所帮助。但是xmllint会给我这样的错误:

example.xml:4: element h1: Schemas validity error : Element 'h1': This element is not expected. Expected is ( {http://www.w3.org/1999/xhtml}* ).

XML:

<?xml version="1.0" encoding="UTF-8"?>
<foo>
<bar>
    <h1>Lorem ipsum</h1>
</bar>
</foo>

架构:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="foo">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="bar" minOccurs="1" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:any namespace="http://www.w3.org/1999/xhtml" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>

我做错了什么?

1 个答案:

答案 0 :(得分:3)

模式表明每个bar元素可以包含http://www.w3.org/1999/xhtml命名空间中的一个元素,但在实例文档中,您使用了位于h1元素>没有命名空间。您需要将xmlns="http://www.w3.org/1999/xhtml"放在h1上,或在树的后面添加前缀声明(例如<foo xmlns:h="http://www.w3.org/1999/xhtml">),然后在XHTML元素上使用该前缀(<h:h1> )。