代码之家  ›  专栏  ›  技术社区  ›  Simon Dugré Metin Atalay

使用C#和外部DTD创建XML

  •  1
  • Simon Dugré Metin Atalay  · 技术社区  · 16 年前

    这是我使用XML的第一步,我必须通过HttpRequest发送一个XML(这对我来说现在不是问题)。我有个关于DTD的问题。根据HttpRequest目的地API,我必须使用位于那里的外部DTD验证我的XML(这是用于加拿大邮递: http://cybervente.postescanada.ca/DevelopersResources/protocolV3/eParcel.dtd

    有人能告诉我怎么做和最简单的方法吗?我已经从谷歌的好文章中找到了很好的一部分,但从来没有什么是我要找的。。。

    注意:我知道DTD是用来做什么的,我可以用纯文本编辑器自己创建一个,并将XML基于DTD,但我的真正意思是,有没有一种方法可以利用C中的DTD(创建一个对象或其他东西…)

    附加:你们中有人已经设置了一个应用程序,使用webresque与加拿大postapi进行对话吗?因为我被打晕了!我发送我的数据和我的请求,它永远不会完成,所以永远不会返回响应。。。这是我的密码:

    public oShippingResponse RetreiveShippingCost(oShippingInformations shipInfos) {
            // Send request                             
            WebRequest request = WebRequest.Create("http://sellonline.canadapost.ca");
            XmlDocument xmlDoc = shipInfos.WriteAsXML();
            request.ContentType = "text/xml";
            request.Method = "POST";
    
            xmlDoc.Save(request.GetRequestStream());
            try {
                WebResponse response = request.GetResponse();
            } catch (Exception ex) {
                throw ex;
            }
            return new oShippingResponse();
        }
    
    2 回复  |  直到 16 年前
        1
  •  2
  •   Abel    16 年前

    不,没有区别 怎样

    那么,加拿大邮政要求什么,你应该 验证 你的XML与DTD的对比。虽然有效并不意味着输入是正确的,但它应该提前警告您无效的输入。这正是他们希望您这样做的原因:如果您的输出与DTD相对应,那么他们可以保证您可以处理输入(至少在大多数情况下是这样)。

    validate your input against a DTD using C# on Microsoft Support .

    手工编辑XML的注意事项:大多数XML编辑器都能够读取DTD并警告您DTD是正确的,甚至在您键入时(例如在visualstudio中)提供语法帮助。XML标准要求,如果DTD存在于XML的头文件中,则XML本身 必须 验证并 不能

        2
  •  1
  •   Stuart Grassie    16 年前

    您需要创建一个验证XML读取器。您需要一个XmlSchemaSet来存储模式,还需要一个XmlReaderSettings对象来设置XmlReader的配置选项。类似(未经测试):

    var schemaSet = new XmlSchemaSet();
    schemaSet.Add(null, pathToSchema);
    
    var settings = new XmlReaderSettings();
    settings.ValidationType = ValidationType.DTD;
    settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
    settings.Schemas = schemas;
    settings.ConformanceLevel = ConformanceLevel.Document;
    settings.ValidationEventHandler += ValidationHandler;
    
    using(var fstream = new FileStream(pathToDocument))
    {
        using(var reader = XmlReader.Create(documentStream, settings))
        {
            while(reader.Read())
            {
            }
        }
    }
    

    在ValidationHandler中,您可以执行一些操作,比如捕获您可能感兴趣输出的任何验证错误/警告。

    推荐文章