【问题标题】:XSD - Ignoring any Content of XML ElementXSD - 忽略 XML 元素的任何内容
【发布时间】:2017-12-05 19:13:47
【问题描述】:

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

<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>

实际使用的数据实际上是一个支持数据库,这意味着在数十万个条目(NOTES2)中有多个占位符,所以我当然不能更改任何内容。注释还可以包含任意数量的占位符,包括无。

现在的问题是,如何能够将“NOTES”的任何内容理解为纯文本,而忽略所有类似的 XML,如 &lt;function&gt;&lt;variable_name&gt;&lt;option&gt;。 (当然还有很多其他人)

我已经得到了什么:

<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 方面的专家。我只能理解我读到的内容。我所读的是,在“注释”中找到的任何标签都应该在解释时跳过。但不幸的是,解析器说:

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

当然,错误消息告诉我删除元素“NOTES”的实体“类型”,但如果我这样做,错误是:

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

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

最好的问候 马吕斯

【问题讨论】:

    标签: xml xsd


    【解决方案1】:

    不能写入 XSD 以允许 XML 不是 well-formed

    你不能定义一个 XSD 来允许

    <NOTES>please try <variable_name> inside <function></NOTES>
    

    因为这样的数据不是格式良好的 XML。 &lt; 字符不能在 XML 中使用非转义字符而不作为标记的开始。 您在 XSD 中所做的任何事情都无法改变这一点。

    选项

    1. 转义&lt;

      <NOTES>please try &lt;variable_name> inside &lt;function></NOTES>
      
    2. 使用 CDATA:

      <NOTES><![CDATA[please try <variable_name> inside <function>]]></NOTES>
      
    3. 或者关闭“元素”:

      <NOTES>please try <variable_name/> inside <function/></NOTES>
      

    【讨论】:

    • 感谢您的快速回答。我认为 CDATA 最容易添加到文件中。
    猜你喜欢
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    相关资源
    最近更新 更多