【问题标题】:Pattern matching on xsd:element namexsd 上的模式匹配:元素名称
【发布时间】:2012-07-06 19:00:01
【问题描述】:

我正在使用 SQL XML 批量加载将数据直接注入数据库。我的 XML 和 xsd 如下:

XML:

<?xml version="1.0"?>
<Data> 
  <USEFUL>
        <Value>3.1</Value>
        <Date>12/20/2001</Date>
  </USEFUL>

  <Something>
        <Value>3.1</Value>
        <Date>12/20/2001</Date>
  </Something>

</Data>

XSD:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:sql="urn:schemas-microsoft-com:mapping-schema">

    <xsd:simpleType name="anyElement">
        <xs:restriction base="xs:string">
            <xs:pattern value="[A-Za-z]+" />   
        </xs:restriction> 
    </xsd:simpleType>

    <xsd:element name="USEFUL" sql:relation="DATA" >

        <xsd:complexType>
           <xsd:sequence>
                <xsd:element name="Value" type="xsd:string" />
                <xsd:element name="Date" type="xsd:date" />
           </xsd:sequence>
        </xsd:complexType>

    </xsd:element>

    <xsd:element type="anyElement" sql:relation="NON-DATA" >

        <xsd:complexType>
           <xsd:sequence>
                <xsd:element name="Value" type="xsd:string" />
                <xsd:element name="Date" type="xsd:date" />
           </xsd:sequence>
        </xsd:complexType>

    </xsd:element>

</xsd:schema> 

我想将“USEFUL”元素插入到同一个表中,并将其他所有元素插入到不同的表中。有没有办法使用通配符 * 作为名称或正则表达式来将不需要的内容过滤到另一个表中?

谢谢。

【问题讨论】:

    标签: xml regex xml-parsing xsd sqlbulkcopy


    【解决方案1】:

    不,这是不可能的 - 无法在 XSD 中定义一种复杂类型,该类型适用于名称与指定名称不同的任何元素。您必须定义类型:

     <xsd:complexType name="anyElement"> 
        <xsd:sequence> 
            <xsd:element name="Value" type="xsd:string" /> 
            <xsd:element name="Date" type="xsd:date" /> 
        </xsd:sequence> 
     </xsd:complexType> 
    

    然后明确列出所有进入“其他”表的元素:

     <xsd:element name="Something" type="anyElement" sql:relation="NON-DATA"/>
     <xsd:element name="SomethingElse" type="anyElement" sql:relation="NON-DATA"/>
     <xsd:element name="YetAnotherOne" type="anyElement" sql:relation="NON-DATA"/>
     . . . 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多