validando o schema de arquivos XML com.ネットE C


Embora Muitas Pessoas possam torcer o nariz ao ouvirem termos como:webサービス,soap,xml,schema,xsd,wsdlなどs s o o tecnology as que teremos que lidar em algum momento da nossa vida profissional
Protocolos e Padrは、Mis leves como休み、GRPC、Graphics、その他、EST - Apolo o Cada Vez Mis se Portulizando、Mas Cexstem grandes Projetos(SEM PREVIS SEO O O Migra Methra o o o)、Consolidados que Utilizam o Protocolo Soo para Troca de Informa
いいえブラジル、dois grandesはexo sをoNota Fiscal Eletrônica - NF-e イーオーWeb Service de Rastreamento dos Correios .
o vvosはneste artigoを付与するか?
1 . entender OS基本ツールProtocolo SOAP
2 . Cherar um Servi - are - gen - gen - rico - para - validar Quarar Arquivo XML , COM Diferentes Schemas
3 .クリアーマウマAPIの残りのem.ネットパラフェイザAヴァリアーダ

1 . o protocolo soap


<研究ノート>コーム,メイリア=アパルカ著『コーパス』をめぐってNenhumソフトウェアを使用してください.

O SEU CocoのためのSE ESTE、必然的なEm Algum Momento Vocは、前のものを食べます.
o Protocolo SOAP -単純なオブジェクト・アクセス・プロトコル( EmポルトガルGenu s , Procolcolo Simple de Aceso - Roup Obijeto )可能性
Protocolo HTTPパラトランスポーターOS DADOS .<研究ノート> Protocolo Padr , O , Permite que Systemas Construction des Dos com diferentes Linguagens de Programa ' s ' s e e diferentes sisistemas operacionais , troquem informa sor de de forma透明体
アルのM disso、permite que o produtor destes serviのseのリモコン、defina o formato da entrada de dados que serξaceito、usezando para isto os XMLスキーマ- XMLスキーマの定義(emポルトガルGenu s s、Defini Misrantion o o ESquema XML).
sは、o arquivos com a拡張s o oです.xsd , COM os seguintes tipos de conte - dem do :
<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:complexType name="TEndereco">
        <xsd:sequence>
            <xsd:element name="logradouro" type="xsd:string"/>
            <xsd:element name="complemento" type="xsd:string"/>
            <xsd:element name="bairro" type="xsd:string"/>
            <xsd:element name="CEP">
                <xsd:simpleType>
                    <xsd:restriction base="xsd:string">
                        <xsd:maxLength value = "9"/>
                        <xsd:minLength value = "9"/>
                    </xsd:restriction>
                </xsd:simpleType>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>

例示的なacima、foi definido uma entradaデendereについてのos、chhamadaデtendereco、contendo os campos : logradouro、numero、complemento、bairro e - cep、cada um com a sua敬意のregra de preenchimento<研究ノート>デモステ・モロロ,ポドモエモスのティヴォ研究
<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:include schemaLocation="TEndereco.xsd"/>
    <xsd:element name="pessoa">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="nome">
                    <xsd:simpleType>
                        <xsd:restriction base="xsd:string">
                            <xsd:maxLength value = "20"/>
                            <xsd:minLength value = "2"/>
                        </xsd:restriction>
                    </xsd:simpleType>
                </xsd:element>
                <xsd:element name="sobrenome">
                    <xsd:simpleType>
                        <xsd:restriction base="xsd:string">
                            <xsd:maxLength value = "20"/>
                            <xsd:minLength value = "2"/>
                        </xsd:restriction>
                    </xsd:simpleType>
                </xsd:element>
                <xsd:element name="endereco" minOccurs="1" maxOccurs="1" type="TEndereco"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>
例としてacima、o Tipo Tendereco foi利用可能なtipo tpessoa.Desta forma , es possは、VegaとしてRegas as tipo de entrada aceito pelo webservice soapを定義します.
ディラ!
パラQueem Trabalha com Orientaは、Oとしてobjetos、OSスキーマas seriamクラス、j are os os arquivos xml que transtam os dados、Seriamのuminstのnncia desta classe、ou um objeto instanciado.
Esta foi apenasは、Ao Proqucolo石鹸、O o Protocolo石鹸、como nを得ます、そして、objetivdar neste tema、deixo aqua a a fonixデinforma
https://www.w3.org/TR/soap/

2 . Crivi um sero - o gen gen - rico - para - validar Quesar Scheme de Diferentes Tipos de XML


2.1 .アンビエンテ


Visual Studioコードhttps://code.visualstudio.com/Download )
. NET 5.0 SDKhttps://dotnet.microsoft.com/download/dotnet/thank-you/sdk-5.0.400-windows-x64-installer )
vamos criar uma apiは単純になり,que deber berはmaの文字列を表している.
パラシュートで降下してください.ネット5.0 SDKは、テトスディプロンは、VerのオーマPoderosa ferramentaデlinhaデcomando que nosアジャダル・アデ・インクルーブル・コムである.
アブラUm diretは、RUR QualkerをしますSEU ComputadorをしてくださいCMD E TECLE入力.

AO fazer isto , oプロンプトde comando do windows , abrir des o positivo diret des rio autoticamente :

Oコマンドーdotnet new webapi --name web.api.xml.schema.validation E TECLE入力.

AP通信のAlguns segundos、teremos um projetoは、tipoウェブAPIを行います.
パラacessのは- lo noのVisual Studioのコードは、Navegueパラオocode . E TECLE E ENTER

TerA do Visual Studio Code Ser Apata Autoticamente , COM O Projeto Previamente Criado , J - Care Carregado :

na Primeira Exec u o o o o o、o Visual Studioコードの識別子は、言語学のna na qual o projeto estのsendoのdesenvolvido e perguntarのse deseja incluirの拡張s o o o o c c
Visual Studioコード( Ctrl +') E Digitar O Comando :dotnet run .

<研究ノート>https://localhost:5001/swagger ブラウザのパラverのAPI sendoのexecutada.

エヌアールは、ベルを見ます.ネットN!
セグアー、Criaremos um Serviは、o Injuを与えます.Velは、Ver - Ver Por Repber E Validar o Arquivo XMLを支持します.
CRIE O Diretは、Rioサービスna raizをしますprojeto、com os seguintes subdiret .
CRe o Arquivo IxmlValidationService.<高橋潤子>
namespace web.api.xml.schema.validation.Services.InterfacesServicos
{
    public interface IXMLValidationService
    {        
        string XMLValidate(string XML);
    }
}

AGORA VAMAS CRUAR UMA CLASSE QUEの実装
<高橋潤子><高橋潤子>
using web.api.xml.schema.validation.Services.InterfacesServicos;

namespace web.api.xml.schema.validation.Services.Servicos
{
    public class XMLValidationService: IXMLValidationService
    {        

    }
}
Next Momento , O Visual Studio Code Exbir Les - um Erro , Pois n - Astro o Estamos Aainda , Implentando o xmlValidate Definido NA Interface IxmlValidationService :

パラレゾルバーエステの問題,マウスの所謂マウスについての一考察

アトリナトゥラ・ドゥ・トド・セ・エ・クリダAutomaticamente :
using web.api.xml.schema.validation.Services.InterfacesServicos;

namespace web.api.xml.schema.validation.Services.Servicos
{
    public class XMLValidationService : IXMLValidationService
    {
        public string XMLValidate(string XML)
        {
            throw new System.NotImplementedException();
        }
    }
}
のアゴラvamos darは、CIO AO processoデvalidaの哀悼書o oを作ります.
パラシュートで降下してください.
クリエのディレット・アール・リオ・スィーゼスの図像
Arquivo : Tendereco.XSD
コンテ・エド
<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:complexType name="TEndereco">
        <xsd:sequence>
            <xsd:element name="logradouro" type="xsd:string"/>
            <xsd:element name="complemento" type="xsd:string"/>
            <xsd:element name="bairro" type="xsd:string"/>
            <xsd:element name="CEP">
                <xsd:simpleType>
                    <xsd:restriction base="xsd:string">
                        <xsd:maxLength value="9"/>
                        <xsd:minLength value="9"/>
                    </xsd:restriction>
                </xsd:simpleType>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>
Arquivo : Tpessoa.XSD
コンテ・エド
<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:include schemaLocation="TEndereco.xsd"/>
    <xsd:element name="pessoa">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="nome">
                    <xsd:simpleType>
                        <xsd:restriction base="xsd:string">
                            <xsd:maxLength value = "20"/>
                            <xsd:minLength value = "2"/>
                        </xsd:restriction>
                    </xsd:simpleType>
                </xsd:element>
                <xsd:element name="sobrenome">
                    <xsd:simpleType>
                        <xsd:restriction base="xsd:string">
                            <xsd:maxLength value = "20"/>
                            <xsd:minLength value = "2"/>
                        </xsd:restriction>
                    </xsd:simpleType>
                </xsd:element>
                <xsd:element name="endereco" minOccurs="1" maxOccurs="1" type="TEndereco"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>
エステArquivos sのo o oスキーマas validarは、o o o conteになります.
oのように、todo xmlvalidate、contのm m um parのメトロはtipoの文字列のserの有効利用します.XMLXMLドキュメント.
<高橋潤子>
using System.Xml;
using web.api.xml.schema.validation.Services.InterfacesServicos;

namespace web.api.xml.schema.validation.Services.Servicos
{
    public class XMLValidationService : IXMLValidationService
    {
        public string XMLValidate(string XML)
        {
            XmlDocument document = new XmlDocument();            
            try
            {
                document.Load(XML);
            }
            catch (System.Exception ex)
            {                
                throw new System.Exception("Houve um erro ao gerar um documento XML com os dados recebidos. " + ex.Message);
            }

            return "";      
        }
    }
}
comのISOは、teremosアムserviは、que queは、maの文字列を抑制します.
Lembre se , o que Validaremos es um schema xml xml e para isto , o conte - sed do XML dever len no m m nimo ser um xml bem formado
パラCriar O Mecanismo de Valida Spotemo - O , UtilizareMOS O Validate ( ValidationEventHandler ValidationEventHandler )名前空間システムを行います.XMLXMLドキュメント.
Portanto , Gas as a a a a a a a e e a na classe XmlValidationService :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml;
using System.Xml.Schema;
using web.api.xml.schema.validation.Services.InterfacesServicos;

namespace web.api.xml.schema.validation.Services.Servicos
{
    public class XMLValidationService : IXMLValidationService
    {
        private static readonly ICollection<string> falhas = new List<String>();

        public string XMLValidate(string XML)
        {
            XmlDocument document = new XmlDocument();
            try
            {
                document.LoadXml(XML);
                string falhas = ValidarXmlPessoa(document);

                if (falhas.Count() > 0)
                    return falhas;
                else
                    return "Arquivo validado com sucesso!";

            }
            catch (Exception ex)
            {
                throw new Exception("Houve um erro ao gerar um documento XML com os dados recebidos. " + ex.Message);
            }
        }

        /// <summary>
        /// Executa a validação de schema do XML do tipo "TPessoa", com base nos arquivos .xsd
        /// </summary>
        private string ValidarXmlPessoa(XmlDocument dados)
        {
            string retorno = "";
            // Inclui os schemas XSD para validação do documento do tipo "TPessoa" e suas dependências
            ICollection<string> XSDFiles = new List<String>();
            try
            {                
                XSDFiles.Add(@"Services\XMLValidation\Schemas\TPessoa.xsd");
                XSDFiles.Add(@"Services\XMLValidation\Schemas\TEndereco.xsd");
            }
            catch (Exception ex)
            {
                throw ex;
            }

            // Aciona o método genérico de validações de schemas, mas que neste contexto, estará validando apenas os tipos "TEndereco" e "TPessoa"
            List<string> validacao = ValidarDocumentoXML(dados, XSDFiles).ToList();

            if (validacao.Count > 0)
            {
                retorno = "Ocorreram os seguintes erros na validação:\n";
                foreach (var item in validacao)
                {
                    retorno += item;
                }
            }
            return retorno;
        }

        /// <summary>
        /// Este é um método genérico, que serve para validar qualquer o schema de qualquer tipo de arquivo xml
        /// </summary>
        private static ICollection<string> ValidarDocumentoXML(XmlDocument doc, ICollection<string> XSDFiles)
        {
            // Limpa a lista de falhas de schema
            falhas.Clear();
            try
            {
                // Adiciona todos os arquivos .xsd ao fluxo de validação
                foreach (var item in XSDFiles)
                {
                    doc.Schemas.Add(null, item);
                }
            }
            catch (System.Exception ex)
            {
                throw new Exception("Houve um erro ao incluir os arquivos XSD para validar o arquivo XML.\n" + ex.Message);
            }
            try
            {
                // Delegate responsável por manipular os erros ocorridos: ValidationCallBack()
                doc.Validate(ValidationCallBack);
            }
            catch (XmlSchemaValidationException ex)
            {
                throw new Exception("Houve um erro executar a validação do documento XML. " + ex.Message);
            }

            return falhas;
        }

        /// <summary> 
        /// Manipulador de erros do xml
        /// Sua finalidade é obter as mensagens de erro (disparadas pelo método "ValidarDocumentoXML") e as incluir a variável "falhas"
        /// </summary> 
        private static void ValidationCallBack(object sender, ValidationEventArgs args)
        {
            // Podem ser gerados dois tipos de falhas ("XmlSeverityType"), portanto, a estrutura abaixo, separa os erros entre "Alerta (Warning)" ou "Erros (Error)"
            if (args.Severity == XmlSeverityType.Warning)
            {
                falhas.Add("Alerta: " + TraduzMensagensDeErro(args.Message) + " (Caminho: " + ObtemCaminho(args) + ")");
            }
            else if (args.Severity == XmlSeverityType.Error)
            {
                falhas.Add("Erro: " + TraduzMensagensDeErro(args.Message) + " (Caminho: " + ObtemCaminho(args) + ")");
            }
        }

        /// <summary>
        /// Durante a validação do schema de um arquivo xml, este método auxilia na obtenção do caminho completo da tag que causou algum problema de validação
        /// </summary>
        private static string ObtemCaminho(ValidationEventArgs args)
        {
            // Captura a referência para a tag que causou o problema (falha de schema)
            XmlSchemaValidationException ex = (XmlSchemaValidationException)args.Exception;
            object sourceObject = ex.SourceObject;

            if (sourceObject.GetType() == typeof(XmlElement))
            {
                XmlElement tagProblema = (XmlElement)(sourceObject);
                return GetCaminhoTagXML(tagProblema.ParentNode) + "/" + tagProblema.Name;
            }
            else
            {
                return "";
            }
        }

        /// <summary>
        /// Devolve o caminho completo de um elemento de um documento XML, no padrão: "\elemento_raiz\elemento2\elemento3\..."
        /// </summary>
        private static string GetCaminhoTagXML(XmlNode args)
        {
            var node = args.ParentNode;
            if (args.ParentNode == null)
            {
                return "";
            }
            else if (args.ParentNode.NodeType == XmlNodeType.Element)
            {
                // Elemento atual é um nó com mais itens
                // Chama o próprio método recursivamente, para obter toda a árvore da tag atual
                return GetCaminhoTagXML(node) + @"/" + args.Name;
            }
            return "";
        }

        /// <summary>
        /// Altera o texto das mensagens de validação do schema, de inglês para português
        /// </summary>
        private static string TraduzMensagensDeErro(string mensagem)
        {
            mensagem = mensagem.Replace("The value of the 'Algorithm' attribute does not equal its fixed value.", "O valor do atributo 'Algorithm' não é igual ao seu valor fixo.");
            mensagem = mensagem.Replace("The '", "O elemento '");
            mensagem = mensagem.Replace("element is invalid", "é inválido");
            mensagem = mensagem.Replace("The value", "O valor");
            mensagem = mensagem.Replace("is invalid according to its datatype", "é inválido de acordo com o seu tipo de dados");
            mensagem = mensagem.Replace("The Pattern constraint failed.", "");
            mensagem = mensagem.Replace("The actual length is less than the MinLength value", "O comprimento real é menor que o valor MinLength");
            mensagem = mensagem.Replace(" in namespace 'http://www.w3.org/2000/09/xmldsig#'.", "");
            mensagem = mensagem.Replace("The element", "O elemento");
            mensagem = mensagem.Replace("has invalid child element", "tem um elemento filho inválido");
            mensagem = mensagem.Replace("List of possible elements expected:", "Lista de possíveis elementos esperados:");
            mensagem = mensagem.Replace("The Enumeration constraint failed.", "");
            mensagem = mensagem.Replace("http://www.w3.org/2000/09/xmldsig#:", "");
            mensagem = mensagem.Replace("http://www.w3.org/2001/XMLSchema:", "");
            mensagem = mensagem.Replace("The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.", "A entrada não é uma string Base-64 válida, pois contém um caractere não base 64, mais de dois caracteres de preenchimento ou um caractere ilegal entre os caracteres de preenchimento.");
            mensagem = mensagem.Replace("The required attribute", "O atributo obrigatório");
            mensagem = mensagem.Replace("is missing", "está ausente");
            mensagem = mensagem.Replace("has incomplete content", "tem conteúdo incompleto");
            mensagem = mensagem.Replace("as well as", "bem como");
            return mensagem;
        }
    }
}
コモA Classse ficou um Pulco Extensaは、利用します、そして、利用してください.
APの証人は、Estasを修飾します、Temos O Serviは、oパラダo Validaの結果を得ます、oは、XMLを完成させます.
Ma Primeiro、Vamos incluir馬は、言及します.API.XMLスキーマ.バリデーション.Capprojパラo o o o o o o o o o o o o o o t o o o o c o c o oアスピネット.MVCNewtonsoftJSON、que NOSの補助金は、Trabalhar com Arquivos XML NOSコントローラDA APIです.
エディットoコンテは、do Arquivoウェブをします.API.XMLスキーマ.バリデーション.LINHA :
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="5.0.3" />
セグンテ・フォルマ
<Project Sdk="Microsoft.NET.Sdk.Web">
    <PropertyGroup>
        <TargetFramework>net5.0</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3"/>
        <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="5.0.3"/>
    </ItemGroup>
</Project>
AP通信の賛辞Aは、NIA CIAを参照します.CS , Deixando - o da seguinte forma :
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.OpenApi.Models;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
using web.api.xml.schema.validation.Services.InterfacesServicos;
using web.api.xml.schema.validation.Services.Servicos;

namespace web.api.xml.schema.validation
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // Configurações da injeção de dependência do serviço validador de documentos XML
            services.AddScoped(typeof(IXMLValidationService), typeof(XMLValidationService));

            services.AddControllers();
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo { Title = "web.api.xml.schema.validation", Version = "v1" });
            });

            //Inclusão do framework de serialização NewtonSoft
            services.AddControllers().AddNewtonsoftJson();

            //Ajuste para permitir receber conteudos do tipo XML nos controllers da API
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
                .AddNewtonsoftJson
                    (options => { }).AddXmlSerializerFormatters()
              .AddXmlDataContractSerializerFormatters();

        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseSwagger();
                app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "web.api.xml.schema.validation v1"));
            }

            app.UseHttpsRedirection();
            app.UseRouting();
            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }
}

クリプトOエンドポイントパラシュートで降下する人


私たちは、私たちによって実行されます.
CleeなしDiretは、rio\コントローラをarquivo xmlValidationControllerにします.CS COM o seguinteコンテ
using System.ComponentModel;
using Microsoft.AspNetCore.Mvc;
using web.api.xml.schema.validation.Services.InterfacesServicos;

[Description("Validação de XML")]
public class XMLValidationController : Controller
{
    //Interface do serviço que valida o arquivo XML e será injetado automaticamente em tempo de execução
    private readonly IXMLValidationService _XMLValidationService;

    public XMLValidationController(IXMLValidationService XMLValidationService)
    {
        _XMLValidationService = XMLValidationService;
    }

    [HttpPost("api/validarxml/")]
    public string Validar([FromBody] string strDocumento)
    {
        return _XMLValidationService.XMLValidate(strDocumento);
    }
}

トドo cは、digo daのaplicaである.アゴラ、AO Executar NossaウェブAPI e Navegarパラohttps://localhost:5001/swagger , teremos acesso ao novo endpoint xmlverify conforme mostra a imagem a seguir :

AO Clicarなしボットは、oをそれにしてみてください.
"<?xml version='1.0' encoding='UTF-8'?>
<pessoa>
    <nome>Silvair</nome>
    <sobrenome>Leite Soares</sobrenome>
    <endereco>
        <logradouro>Rua Goia</logradouro>
        <complemento>Quadra e lote qualquer</complemento>
        <bairro>Setor Gentil Meirelles</bairro>
        <CEP>74575-200</CEP>
    </endereco>
</pessoa>"
Schema - ser - Validate - com Sucesso , veja na imagem a seguir :



Ma se vocは、ファイザー・タッカーModifica Sponrano oペイロード、デforma que o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o d o o d o d o o d o d o o d o d o o d o d o o d o d o o d o d o o d o d o o d d d d d d e d e d e d e d e d e d e d i d e d e e d i d e d e d e d e e d e d e e d e d e e d e e d e e d e d e e d e e d e e d e e d e e d e e d e e d e e d e e e e e e e r e e e r e e r e e r e eVeja seguir :
"<?xml version='1.0' encoding='UTF-8'?>
<pessoa>
    <nome>Silvair</nome>
    <sobrenome/>
    <endereco>
        <logradouro>Rua Goia</logradouro>
        <complemento>Quadra e lote qualquer</complemento>
        <bairro>Setor Gentil Meirelles</bairro>
        <ElementoNaoPrevisto>Texto qualquer</ElementoNaoPrevisto>
        <CEP>74575-200</CEP>
    </endereco>
</pessoa>"

Omiti Intencionalmente o Conte - End do Da Tag Sobrenome e I a Elemenn n ' re to the None Tag Endereco , Veja o resultado :


エステPasso、結論は、o o o nosso projeto de testeに終わります.Lembrando que , Por mais que estejamos validando os tipos "pessoa "e "endereco "durante este artigo , o servi se o o que constu sed mos servir ze para validar qualker tipo de schema xmlBristandoパラアイソ、incluir os尊敬のArquivos.XSD - no - ret - rio\chemas e fazer Alpuumas PeneNasは、Claar - um - Endpoint Esle - de Fico - para Cada Tipo de Arquivo XML A SER Validadoを参照してください.
東南アジアの東南アジア諸国連合https://github.com/silvairsoares/web.api.xml.schema.validation
を参照してください.
マロッティ,ジョス.カルロス.xml - validando - um Documentto XML com um schema ( c .ディプロン・プルhttp://www.macoratti.net/11/10/c_vxml1.htm . AceSSOエム:13日前.DE 2021