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

xsd和xml验证

岳宣
2023-03-14

我在验证xml和xsd时遇到问题。我从xsd模式中得到这个错误。

src解决方案。4.2:解析组件“urn:id”时出错。检测到“urn:id”位于命名空间“urn:schemas microsoft com:xml-diffgram-v1”中,但此命名空间中的组件无法从架构文档中引用virtual://server/schema.xsd。如果名称空间不正确,可能需要更改“urn:id”的前缀。如果这是正确的名称空间,则应将适当的“导入”标记添加到virtual://server/schema.xsd'

xml模式中,我也发现了这个错误。

cvc复合型。2.4.d:发现以元素“xs:schema”开头的内容无效。此时不需要任何子元素

这是我的xml文件

<?xml version="1.0" encoding="ISO-8859-1"?>

<AddCustomerNotesByExtIDResult>
  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="NewDataSet">
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
      <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="Status">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="StatusCode" type="xs:int" minOccurs="0"/>
                <xs:element name="Description" type="xs:string" minOccurs="0"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:complexType>
    </xs:element>
  </xs:schema>
  <diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <NewDataSet>
      <Status diffgr:id="Status1" msdata:rowOrder="0">
        <StatusCode>0</StatusCode>
        <Description>Customer Notes added successfully</Description>
      </Status>
    </NewDataSet>
  </diffgr:diffgram>
</AddCustomerNotesByExtIDResult>

这是我的xsd文件

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="NewDataSet">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Status">
              <xs:complexType>
                <xs:sequence>
                  <xs:element type="xs:byte" name="StatusCode"/>
                  <xs:element type="xs:string" name="Description"/>
                </xs:sequence>
                <xs:attribute ref="urn:id" xmlns:urn="urn:schemas-microsoft-com:xml-diffgram-v1"/>
                <xs:attribute ref="urn:rowOrder" xmlns:urn="urn:schemas-microsoft-com:xml-msdata"/>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="AddCustomerNotesByExtIDResult">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="xs:schema"/>
            <xs:element ref="urn:diffgram" xmlns:urn="urn:schemas-microsoft-com:xml-diffgram-v1"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:schema>

共有1个答案

姜弘新
2023-03-14

这一切都很奇怪。您似乎有两个模式版本,一个嵌入在XML文档中,另一个是独立的;他们是不同的!

我想我们应该忽略嵌入在XML中的那个,因为没有证据表明它实际上被用于验证。

因此,您实际上是在验证AddCustomerNotesByExtIDResult元素,模式说它应该有以下内容模型:

它通过引用不同名称空间中的声明来定义这两个元素(xs:schema和urn:diffgram)的内容,但不允许模式包含对不同名称空间中声明的引用,除非使用xs:import声明导入该名称空间的模式。如果没有这样的xs:import,则该模式不完整且无效。

另一个小观察:

<xs:attribute ref="urn:id" xmlns:urn="urn:schemas-microsoft-com:xml-diffgram-v1"/>
<xs:attribute ref="urn:rowOrder" xmlns:urn="urn:schemas-microsoft-com:xml-msdata"/>

现在,有两个属性声明使用相同的命名空间前缀来引用不同的命名空间是完全合法的,但是这非常不正常,也非常令人困惑,所有这些都导致了一个普遍的结论,即整个事情是在没有非常理解它的含义的情况下放在一起的。

 类似资料:
  • 我没有编写C++代码,因为我的首要任务是创建有效的xml和XSD。 xml: XSD: 为了验证,我转到:https://www.freeformatter.com/xml-validator-xsd.html 错误:s4s-att-invalid-value:元素“Element”中“type”的属性值无效。记录原因:cvc-datatype-valid.1.2.1:“xs:”不是“QName”

  • 问题内容: 我需要使用给定的XSD文件验证XML文件。我只需要如果验证正常就返回true,否则返回false的方法。 问题答案: 仅返回true或false(也不需要任何外部库):

  • 我正在尝试使用SAX解析和验证SOAP请求。需要两个XSD,一个用于SOAP信封(http://schemas.xmlsoap.org/soap/envelope/),另一个用于我定义的。我找不到针对这两个XSD正确验证请求的方法。 下面是我用来解析请求并根据soapenv验证它的代码。xsd。它工作得很好。如果改为指定XSD,验证将失败,并显示“找不到元素‘soapenv:Envelope’的声

  • 我有一个在Android中使用API10(2.3.3版本)的项目,我有一个问题是用xsd文件验证xml。这是我的代码: 我的Eclipse模拟器抛出一个异常:E/AndroidRuntime(4770):由:java.lang.IllegalArgumentException引起:http://www.w3.org/2001/XMLSchema 在这一行中:SchemaFactory factor

  • 我需要检测枚举中的错误。 这是我用枚举验证XML和XSD的代码,但我得到了很多错误。有人能给我一些关于错误消息(由java程序打印)的反馈吗? 这是我正在验证的文件 这是我的模式 Java程序 这些是我犯的错误 线程“main”组织中出现异常。xml。萨克斯。SAXParseException:cvc elt。1: 找不到元素“person”的声明。在com。太阳组织。阿帕奇。xerces。内部的

  • 我有一个XML文件,其结构如下: XSD模式: 和可视化的XSL文件(学生tylesheet.xsl): 我目前正在学习一门关于XML的短期课程,任务是在XML文件中构建给定的XSD模式和一些示例记录,然后最终使用XSLT将内容可视化为超文本标记语言。其中一项任务指出,我需要使用“urn:学生”作为结构的默认命名空间。然而,当我这样做的时候,我不会在最终的可视化中收到数据。当我从XML文件中删除“