当前位置: 首页 > 知识库问答 >
问题:

通配符##任何错误xml架构验证

司空胤
2023-03-14

根据C#中的模式验证XSD时得到上述错误。Schema查找列出的标记,而进入的其他标记是可选的。下面是我的XSD文件。xml文件需要如何修改,以确保它在XSD中具有下面列出的标记,并忽略额外的标记

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="InvoiceExport" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="InvoiceExport" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="Invoice">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Invoice_ID" type="xs:string" minOccurs="1" />             
              <xs:element name="BillingEntity" minOccurs="1" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Name" type="xs:string" minOccurs="1" />                  
                    <xs:element name="VendorNumber" type="xs:string" minOccurs="1" />                                        
                    <xs:any processContents="lax" maxOccurs="unbounded"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="InvoiceBaseInfo" minOccurs="1" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="InvoiceDate" type="xs:string" minOccurs="1" />                  
                    <xs:element name="BillingEntityInvoiceNumber" type="xs:string" minOccurs="1" />                    
                    <xs:element name="ReceivedDate" type="xs:string" minOccurs="1" />                   
                    <xs:element name="AdjustedBilledAmount" type="xs:string" minOccurs="1" />                    
                    <xs:element name="UserFields" minOccurs="1" maxOccurs="unbounded">
                      <xs:complexType>
                        <xs:all>
                          <xs:element name="FirstApproverID" type="xs:string" minOccurs="1" />
                          <xs:element name="LastApproverID" type="xs:string" minOccurs="1" />
                          <xs:element name="LegalSpendCode" type="xs:string" minOccurs="0" />
                        </xs:all>
                      </xs:complexType>
                    </xs:element>
                     <xs:any processContents="lax" maxOccurs="unbounded"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="InvoiceMatter" minOccurs="1" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>                       
                    <xs:element name="Priority_CD" type="xs:string" minOccurs="1" />                   
                    <xs:element name="InvoiceMatterDetail" minOccurs="0" maxOccurs="unbounded">
                      <xs:complexType>
                        <xs:sequence>                        
                          <xs:any processContents="lax" maxOccurs="unbounded"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="InvoiceMatterAllocation" minOccurs="1" maxOccurs="unbounded">
                      <xs:complexType>
                        <xs:sequence>                          
                          <xs:element name="AllocationAmount" type="xs:string" minOccurs="1" />
                          <xs:element name="ChargeBackAccount1" type="xs:string" minOccurs="1" />
                          <xs:element name="ChargeBackAccount2" type="xs:string" minOccurs="1" />
                          <xs:element name="ChargeBackAccount3" type="xs:string" minOccurs="1" />
                          <xs:element name="UserFields" type="xs:string" minOccurs="0" />
                          <xs:any processContents="lax" maxOccurs="unbounded"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="InvoiceMatterApproval" minOccurs="1" maxOccurs="unbounded">                   
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="EmployeeName" type="xs:string" minOccurs="1" />                          
                          <xs:any processContents="lax" maxOccurs="unbounded"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>         
              <xs:any processContents="lax" maxOccurs="unbounded"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

共有1个答案

上官联
2023-03-14

问题是,您的模式允许任何数量的名为InvoiceMatter的元素,后面跟着一个可以具有任何名称的元素(包括名称InvoiceMatter);因此,如果找到了InvoiceMatter元素,那么它是否匹配特定的元素粒子或通配符就不明确了。

XSD 1.1通过说特定的元素粒子总是优先解决这一问题,因此一个解决方案就是简单地使用XSD 1.1处理器(如Saxon)。

如果不能这样做,通常的XSD 1.0解决方案是在xs:any通配符上使用targetNamespace属性,以通过名称空间来限制它(例如targetNamespace=“##other”)。但这是对您的设计的改变;如果您希望允许元素在同一个名称空间中,那么您就遇到了一个问题。

 类似资料:
  • 下面是XSD。 下面是xml文件。 当尝试使用http://www.utilities-online.info/xsdvalidation验证它时,我得到以下错误 第2行62:org.xml.sax.SAXParseException;行号:2;列号:62;CVC-ELT.1:找不到元素“Message”的声明。

  • 我对XML非常陌生,我面临着验证问题,如果我的XML和XSD文件结构良好,我也希望得到一些反馈。 在根据XSD验证XML时,我经常遇到错误- 下面的XML XSD 如果你发现其中任何一个有任何错误,请随时指出。它们都有从图案到最大长度的限制。 谢谢!!!!

  • 尝试使用@SpringBootTest注释来运行单元测试时,我从Hibernate得到了这个错误。我能在网上找到的所有信息都说要将“hibernate.id.new_generator_mappings”设置为false,但这并不能解决我的问题。 2017-11-17 13:20:28.885警告11396--[main]O.s.w.cs.GenericWebApplicationContext:

  • 问题内容: 但是,这将返回一条错误消息:线程“ main”中的异常java.lang.IllegalArgumentException:无法加载实现由http://www.w3.org/2001/XMLSchema -instance 指定的模式语言的SchemaFactory。 这是我的代码还是实际的xsd文件有问题? 问题答案: 该错误意味着您安装的Java没有任何可解析XMLSchema文件

  • 使用eclipse时,我消除了所有错误,但当我更改xml文档中的元素内容时,超出了中设置的限制。xsd文件没有出现验证错误。我已尝试使用联机验证http://www.freeformatter.com/xml-validator-xsd.html我得到了错误“Cvc elt.1:找不到元素“DatabaseInventory”…行“4”,列“69”的声明”,但在eclipse中它验证得很好。不知道