• <i id='zTq0f'><tr id='zTq0f'><dt id='zTq0f'><q id='zTq0f'><span id='zTq0f'><b id='zTq0f'><form id='zTq0f'><ins id='zTq0f'></ins><ul id='zTq0f'></ul><sub id='zTq0f'></sub></form><legend id='zTq0f'></legend><bdo id='zTq0f'><pre id='zTq0f'><center id='zTq0f'></center></pre></bdo></b><th id='zTq0f'></th></span></q></dt></tr></i><div id='zTq0f'><tfoot id='zTq0f'></tfoot><dl id='zTq0f'><fieldset id='zTq0f'></fieldset></dl></div>

    1. <small id='zTq0f'></small><noframes id='zTq0f'>

      <legend id='zTq0f'><style id='zTq0f'><dir id='zTq0f'><q id='zTq0f'></q></dir></style></legend>

      <tfoot id='zTq0f'></tfoot>
        • <bdo id='zTq0f'></bdo><ul id='zTq0f'></ul>

        c# XML Schema 验证

        时间:2023-06-02
            <tbody id='fERfZ'></tbody>
            • <legend id='fERfZ'><style id='fERfZ'><dir id='fERfZ'><q id='fERfZ'></q></dir></style></legend>
                <bdo id='fERfZ'></bdo><ul id='fERfZ'></ul>

                • <tfoot id='fERfZ'></tfoot>

                  <small id='fERfZ'></small><noframes id='fERfZ'>

                  <i id='fERfZ'><tr id='fERfZ'><dt id='fERfZ'><q id='fERfZ'><span id='fERfZ'><b id='fERfZ'><form id='fERfZ'><ins id='fERfZ'></ins><ul id='fERfZ'></ul><sub id='fERfZ'></sub></form><legend id='fERfZ'></legend><bdo id='fERfZ'><pre id='fERfZ'><center id='fERfZ'></center></pre></bdo></b><th id='fERfZ'></th></span></q></dt></tr></i><div id='fERfZ'><tfoot id='fERfZ'></tfoot><dl id='fERfZ'><fieldset id='fERfZ'></fieldset></dl></div>
                • 本文介绍了c# XML Schema 验证的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  限时送ChatGPT账号..

                  我有一个很好的 XML 文件,如下所示:

                  I have a nice XML file like this:

                      <?xml version="1.0" encoding="utf-8" ?>
                      <Assets Path="C:Users
                  3plicaGoogle Drive">
                          <Assetd>
                              <FileName>Boomerang - Error codes.xlsx</FileName>
                              <DisplayName>Boomerang - Error codes</DisplayName>
                              <Description>This is the Boomerang error codes file</Description>
                              <Tags>
                                  <Tag>Excel</Tag>
                                  <Tag>Boomerang</Tag>
                              </Tags>
                              <Categories>
                                  <Category>1</Category>
                                  <Category>4</Category>
                              </Categories>
                          </Assetd>
                          <Asset>
                              <FileName>Issue Tracker v5.xlsx</FileName>
                              <Description>This is the issue tracker for Skipstone</Description>
                              <Tags>
                                  <Tag>Excel</Tag>
                                  <Tag>Skipstone</Tag>
                              </Tags>
                              <Categories>
                                  <Category>1</Category>
                                  <Category>4</Category>
                              </Categories>
                          </Asset>
                      </Assets>
                  

                  然后我有我这样创建的架构:

                  and then I have my schema which I created like this:

                      <?xml version="1.0" encoding="utf-8"?>
                      <xs:schema id="data"
                          targetNamespace="http://tempuri.org/data.xsd"
                          elementFormDefault="qualified"
                          xmlns="http://tempuri.org/data.xsd"
                          xmlns:mstns="http://tempuri.org/data.xsd"
                          xmlns:xs="http://www.w3.org/2001/XMLSchema"
                      >
                        <xs:element name="Assets">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="Asset" type="Asset" minOccurs="1" />
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>
                  
                        <xs:complexType name="Asset">
                          <xs:sequence>
                            <xs:element name="FileName" type="xs:string" minOccurs="1" maxOccurs="1" />
                            <xs:element name="DisplayName" type="xs:string" minOccurs="0" maxOccurs="1" />
                            <xs:element name="Description" type="xs:string" minOccurs="0" maxOccurs="1" />
                            <xs:element name="Tags" type="Tags" minOccurs="0" maxOccurs="1" />
                            <xs:element name="Categories" type="Categories" minOccurs="1" maxOccurs="1" />
                          </xs:sequence>
                        </xs:complexType>
                  
                        <xs:complexType name="Tags">
                          <xs:sequence>
                            <xs:element name="Tag" type="xs:string" minOccurs="1" maxOccurs="unbounded" />
                          </xs:sequence>
                        </xs:complexType>
                  
                        <xs:complexType name="Categories">
                          <xs:sequence>
                            <xs:element name="Category" type="xs:int" minOccurs="1" maxOccurs="unbounded" />
                          </xs:sequence>
                        </xs:complexType>
                      </xs:schema>
                  

                  据我所见,xml 文件无效,因为第一个元素是 Assetd 而不是 Asset,但如果我运行我的 c# 代码:

                  As far as I can see looking at that, the xml file is invalid because the first element is Assetd and not Asset, but if I run my c# code:

                  XmlSchemaSet schemas = new XmlSchemaSet();
                  schemas.Add("http://tempuri.org/data.xsd", "data.xsd");
                  
                  XDocument doc = XDocument.Load(openFileDialog1.FileName);
                  string msg = "";
                  doc.Validate(schemas, (o, err) =>
                  {
                      msg = err.Message;
                  });
                  Console.WriteLine(msg == "" ? "Document is valid" : "Document invalid: " + msg);
                  

                  它告诉我 xml 是有效的...如果我使用此代码:

                  it tells me the xml is valid... If I use this code:

                  // Set the validation settings.
                  XmlReaderSettings settings = new XmlReaderSettings();
                  settings.ValidationType = ValidationType.Schema;
                  settings.Schemas.Add("http://tempuri.org/data.xsd", "data.xsd");
                  settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
                  settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
                  settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
                  settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
                  
                  // Create the XmlReader object.
                  XmlReader reader = XmlReader.Create(openFileDialog1.FileName, settings);
                  
                  // Parse the file. 
                  while (reader.Read()) ;
                  

                  我在控制台中得到这个输出:

                  I get this output in the console:

                  Warning: Matching schema not found.  No validation occurred. Could not find schema information for the element 'Assets'.
                  Warning: Matching schema not found.  No validation occurred. Could not find schema information for the attribute 'Path'.
                  Warning: Matching schema not found.  No validation occurred. Could not find schema information for the element 'Assetd'.
                  Warning: Matching schema not found.  No validation occurred. Could not find schema information for the element 'FileName'.
                  Warning: Matching schema not found.  No validation occurred. Could not find schema information for the element 'DisplayName'.
                  Warning: Matching schema not found.  No validation occurred. Could not find schema information for the element 'Description'.
                  Warning: Matching schema not found.  No validation occurred. Could not find schema information for the element 'Tags'.
                  Warning: Matching schema not found.  No validation occurred. Could not find schema information for the element 'Tag'.
                  Warning: Matching schema not found.  No validation occurred. Could not find schema information for the element 'Tag'.
                  Warning: Matching schema not found.  No validation occurred. Could not find schema information for the element 'Categories'.
                  Warning: Matching schema not found.  No validation occurred. Could not find schema information for the element 'Category'.
                  Warning: Matching schema not found.  No validation occurred. Could not find schema information for the element 'Category'.
                  Warning: Matching schema not found.  No validation occurred. Could not find schema information for the element 'Asset'.
                  Warning: Matching schema not found.  No validation occurred. Could not find schema information for the element 'FileName'.
                  Warning: Matching schema not found.  No validation occurred. Could not find schema information for the element 'Description'.
                  Warning: Matching schema not found.  No validation occurred. Could not find schema information for the element 'Tags'.
                  Warning: Matching schema not found.  No validation occurred. Could not find schema information for the element 'Tag'.
                  Warning: Matching schema not found.  No validation occurred. Could not find schema information for the element 'Tag'.
                  Warning: Matching schema not found.  No validation occurred. Could not find schema information for the element 'Categories'.
                  Warning: Matching schema not found.  No validation occurred. Could not find schema information for the element 'Category'.
                  Warning: Matching schema not found.  No validation occurred. Could not find schema information for the element 'Category'.
                  

                  谁能告诉我我做错了什么吗?它正在杀死我:(

                  Can anyone tell me what I am doing wrong please? It is killing me :(

                  干杯,/r3plica

                  cheers, /r3plica

                  推荐答案

                  你需要在你的xml中设置默认命名空间,像这样:

                  You need to set default namespace in your xml, like this:

                  <?xml version="1.0" encoding="utf-8"  ?>
                      <Assets xmlns="http://tempuri.org/data.xsd">
                          <Asset>
                              <FileName>Boomerang - Error codes.xlsx</FileName>
                              <DisplayName>Boomerang - Error codes</DisplayName>
                              <Description>This is the Boomerang error codes file</Description>
                              <Tags>
                                  <Tag>Excel</Tag>
                                  <Tag>Boomerang</Tag>
                              </Tags>
                              <Categories>
                                  <Category>1</Category>
                                  <Category>4</Category>
                              </Categories>
                          </Asset>
                          <Asset>
                              <FileName>Issue Tracker v5.xlsx</FileName>
                              <Description>This is the issue tracker for Skipstone</Description>
                              <Tags>
                                  <Tag>Excel</Tag>
                                  <Tag>Skipstone</Tag>
                              </Tags>
                              <Categories>
                                  <Category>1</Category>
                                  <Category>4</Category>
                              </Categories>
                          </Asset>
                      </Assets>
                  

                  此外,还有许多其他问题:

                  Also, there is a number of other problems:

                  模式中未定义路径属性,未定义Assetd"元素.maxOccurs="unbounded" 需要在 xs:element name="Asset" 的架构中设置

                  Path attribute is not defined in schema, 'Assetd' element is not defined. maxOccurs="unbounded" need to be set in schema for xs:element name="Asset"

                  如果无法修改xml,则需要从xsd中移除目标架构:

                  In case if you cannot modify xml, you need to remove target schema from xsd:

                  <xs:schema id="data"
                      xmlns:mstns="http://tempuri.org/data.xsd"
                      xmlns:xs="http://www.w3.org/2001/XMLSchema"
                  >
                  

                  并像这样注册架构:

                  settings.Schemas.Add(null, "data.xsd");
                  

                  这篇关于c# XML Schema 验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:.NET xsd 导入器创建不可序列化的类 下一篇:从 XSD 生成 C# 类

                  相关文章

                  最新文章

                  <small id='wsV2M'></small><noframes id='wsV2M'>

                  <tfoot id='wsV2M'></tfoot>
                • <legend id='wsV2M'><style id='wsV2M'><dir id='wsV2M'><q id='wsV2M'></q></dir></style></legend>
                    • <bdo id='wsV2M'></bdo><ul id='wsV2M'></ul>

                  1. <i id='wsV2M'><tr id='wsV2M'><dt id='wsV2M'><q id='wsV2M'><span id='wsV2M'><b id='wsV2M'><form id='wsV2M'><ins id='wsV2M'></ins><ul id='wsV2M'></ul><sub id='wsV2M'></sub></form><legend id='wsV2M'></legend><bdo id='wsV2M'><pre id='wsV2M'><center id='wsV2M'></center></pre></bdo></b><th id='wsV2M'></th></span></q></dt></tr></i><div id='wsV2M'><tfoot id='wsV2M'></tfoot><dl id='wsV2M'><fieldset id='wsV2M'></fieldset></dl></div>