如何指定没有特定名称的元素

时间:2012-04-03 08:45:09

标签: xml xsd

抱歉我的英文。

我需要为我的XML文件编写XML模式。我的XML文件示例:

<?xml version="1.0" encoding="utf-8"?>
<styles>

  <style name="p">
    <text-indent>25px</text-indent>
  </style>

  <style name="td">
    <border>solid 2px</border>
    <border-color>Black</border-color>
    <padding-left>5px</padding-left>
  </style>

  <style name="p.withoutRedLine">
    <text-indent>0px</text-indent>
  </style>

</styles>

每个'style'元素都可以包含任何名称的项目。

我编写了下一个XML模式(问题在代码注释中定义):

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema
    xmlns="http://www.mia-orbis.com/2012/XMLSchema/styles"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:complexType name="style">
    <xsd:sequence minOccurs="1" maxOccurs="1">
      <!--Error in it place (I don't need to specify value 
      of attribute 'name', but from me it demand):-->
      <xsd:element type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>    
    </xsd:sequence>
    <xsd:attribute name="name" type="xsd:ID" use="required"/>
  </xsd:complexType>

  <xsd:element name="styles">
    <xsd:complexType>
      <xsd:sequence minOccurs="1" maxOccurs="1">
        <xsd:element name="style" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

</xsd:schema>

此致

1 个答案:

答案 0 :(得分:0)

您需要使用xsd:any:

<?xml version="1.0" encoding="utf-8"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:complexType name="style"> 
        <xsd:sequence> 
            <xsd:any minOccurs="0" maxOccurs="unbounded" namespace="##any" processContents="skip"/>
        </xsd:sequence> 
        <xsd:attribute name="name" type="xsd:ID" use="required"/> 
    </xsd:complexType> 
    <xsd:element name="styles"> 
        <xsd:complexType> 
            <xsd:sequence> 
                <xsd:element name="style" minOccurs="0" maxOccurs="unbounded" type="style"/> 
            </xsd:sequence> 
        </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

我对您的架构做了一些修复:删除了默认命名空间,将类型设置为样式元素等。

如果您同意使用xsd:any,那么定义您所知道的内容可能是一种很好的做法,并将xsd:any留给其他任何内容。