首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证(和查询)没有XmlElement的OuterXML内容?

验证(和查询)没有XmlElement的OuterXML内容?
EN

Stack Overflow用户
提问于 2011-02-01 21:52:17
回答 1查看 679关注 0票数 3

我有一个Web方法(在SOAP服务中),其签名为:

代码语言:javascript
复制
public msgResponse myWebMethod([XmlAnyElement] XmlElement msgRequest)

我选择在XmlElement之后使用阅读参数,它允许我对参数执行自己的XSD验证。问题是,参数可以是相当大的(最多80‘t的XML),因此按照链接中的建议调用XmlElement.OuterXML()并不是一种非常实用的方法。

还有另一种方法来根据XSD?验证XmlElement对象吗?

更普遍地说,这是否是实现web服务需要大量XML的不适当方法?我遇到了一些使用SoapExtensions直接访问输入流的提示,但我不确定这是适合我的情况的正确方法。

备注:不幸的是,我被链接到了一个现有的和XSD上,我没有能力修改它,这就是为什么我一开始就使用了一个非WCF实现。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-02 01:39:19

下面是一个简单的例子。只需将您的XmlElement传递给此方法:

代码语言:javascript
复制
private static void TheAnswer(IXPathNavigable inputElement)
{
    var schemas = new XmlSchemaSet();
    schemas.Add("http://foo.org/importvalidator.xsd",
                @"..\..\validator.xsd");
    var settings = new XmlReaderSettings
                       {
                           Schemas = schemas,
                           ValidationFlags =
                               XmlSchemaValidationFlags.
                                   ProcessIdentityConstraints |
                               XmlSchemaValidationFlags.
                                   ReportValidationWarnings,
                           ValidationType = ValidationType.Schema
                       };
    settings.ValidationEventHandler +=
        (sender, e) =>
        Console.WriteLine("{0}: {1}", e.Severity, e.Message);
    using (
        XmlReader documentReader =
            inputElement.CreateNavigator().ReadSubtree())
    {
        using (
            XmlReader validatingReader = XmlReader.Create(
                documentReader, settings))
        {
            while (validatingReader.Read())
            {
            }
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4868369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档