XSD - 忽略XML元素的任何内容

时间:2017-12-05 19:13:48

标签: xml xsd

我还在寻找解决某些数据库导出问题的解决方案,如下所示:

<DATA>

<ROW>
    <ID>36342</ID>
    <TIMESTAMP1>2017-11-24 14:54:51</TIMESTAMP1>
    <TIMESTAMP2>2017-11-24 14:54:51</TIMESTAMP2>
    <NOTES>please try <variable_name> inside <function></NOTES>
</ROW>

<ROW>
    <ID>36341</ID>
    <TIMESTAMP1>2017-11-24 12:51:50</TIMESTAMP1>
    <TIMESTAMP2>2017-11-24 12:51:50</TIMESTAMP2>
    <NOTES>Otherwise <option> could also be</NOTES>
</ROW>
</DATA>

实际使用的数据实际上是一个支持数据库,意味着成千上万的Entrys(NOTES2)中有多个占位符,所以当然我无法更改任何内容。 Notes也可以包含任意数量的占位符,包括没有。

现在的问题是,如何能够理解&#34; NOTES&#34;作为纯文本,忽略所有XML外观,如<function><variable_name><option>。 (当然还有很多其他人)

我还有什么:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
        xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
<xsd:element name="DATA" sql:is-constant="1" >  
 <xsd:complexType>  
   <xsd:sequence>  
     <xsd:element name="ROW" sql:relation="document" maxOccurs="unbounded">  
       <xsd:complexType>  
         <xsd:sequence>  
           <xsd:element name="ID"  type="xsd:string" />  
           <xsd:element name="TIMESTAMP1" type="xsd:string" />  
           <xsd:element name="TIMESTAMP2" type="xsd:string" />
                <xsd:element name="NOTES" type="string" >
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:any processContents="skip" minOccurs="0"/> 
                        </xsd:sequence>    
                    </xsd:complexType>
                </xsd:element>
         </xsd:sequence>  
       </xsd:complexType>  
     </xsd:element>  
   </xsd:sequence>  
  </xsd:complexType>  
 </xsd:element>  
 </xsd:schema>

我必须补充一点,事实上我不是XML / XSD的专家。我只能理解我读到的内容。我所读到的是,内部发现的任何标签&#34; NOTES&#34;应该在解释时跳过。但不幸的是,Parser说:

 'type' cannot be present with either 'simpleType' or 'complexType'

当然,错误消息告诉我删除实体&#34;键入&#34;元素&#34;注意&#34;,但如果我这样做,错误是:

Text is not allowed in the context of element 'NOTES' according to DTD/Schema.

那么我现在如何获得这样一个元素的全部内容呢?

祝你好运 的Marius

1 个答案:

答案 0 :(得分:2)

无法编写XSD以允许XML不是well-formed

您无法定义允许的XSD

price':[1, 4], 'amount':[11,40]

因为这样的数据不是格式良好的XML。如果不将<NOTES>please try <variable_name> inside <function></NOTES> 字符用作标记的开头,则不能在XML中使用未转义的字符。 在XSD中你无能为力可以改变这一点。

选项

  1. 逃脱<

    <
  2. 使用CDATA:

    <NOTES>please try &lt;variable_name> inside &lt;function></NOTES>
    
  3. 或关闭“元素”:

    <NOTES><![CDATA[please try <variable_name> inside <function>]]></NOTES>