繁体   English   中英

使用C#和外部DTD创建XML

[英]Creating XML using C# and an external DTD

这是我使用XML的第一步,我必须通过HttpRequest发送XML(这现在对我来说不是问题)。 我有一个关于DTD的问题。 根据HttpRequest目标API,我必须使用位于那里的外部DTD验证我的XML(这是加拿大邮政运送的地址: http : //cybervente.postescanada.ca/DevelopersResources/protocolV3/eParcel.dtd )。 我知道如何写/读XML,但不是根据DTD的。。。有区别吗?

有人可以告诉我如何以及最简单的方法吗? 我在Google的好帖子中看起来很不错,从来没有寻找过...

谢谢!

添加#1

注意:我知道DTD的用途,我可以使用纯文本编辑器自行创建一个DTD,并将XML基于DTD,但是我的意思是,有没有办法在C#中利用DTD(创建对象)或某物...)

添加#2插件:你们中有人已经建立了一个使用webresque与Canada Post API通讯的应用程序吗? 因为我很臭! 我用数据发送请求,但请求永远不会完成,因此永远不会返回响应……这是我的代码:

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();
    }

不,是你如何编写XML,比你应该服从于DTD所设定的规则等没有什么区别。 了解和阅读DTD是一门艺术,因此我希望《加拿大邮政》以更具描述性的方式向您解释该格式,以帮助您创建正确的XML。

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

这是您可以使用Microsoft Support上的C#根据DTD验证输入的方法

关于手动编辑XML的注意事项:大多数XML编辑器都能够读取DTD并警告您DTD是正确的,甚至在您键入时(例如在Visual Studio中)向您提供语法帮助。 XML标准要求,如果XML的标头中存在DTD,则XML本身必须经过验证,如果对DTD无效,则不能对其进行处理。

您需要创建一个验证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中,您可以执行诸如捕获可能对输出感兴趣的任何验证错误/警告之类的工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM