c# - 在没有 OuterXML 的情况下验证(和查询)XmlElement 内容?

标签 c# asp.net xml web-services

我有一个带有以下签名的 Web 方法(在 SOAP Web 服务中):

public msgResponse myWebMethod([XmlAnyElement] XmlElement msgRequest)

我选择在reading 之后使用XmlElement 参数它将允许我对参数执行我自己的 XSD 验证。问题是参数可能非常(最多 80Mb 的 XML),因此按照链接中的建议调用 XmlElement.OuterXML() 并不是一个非常实用的方法.

还有其他方法可以根据 XSD 验证 XmlElement 对象吗?

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

注意:不幸的是,我被束缚在现有的 WSDL 和 XSD 上,我无权更改,这就是我首先使用非 WCF 实现的原因。

最佳答案

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

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

关于c# - 在没有 OuterXML 的情况下验证(和查询)XmlElement 内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4868369/

相关文章:

c# - 使用 WPF 为多个动态皮肤字典创建别名颜色定义

c# - C#从数据库中获取值

asp.net - 使用 SQL Server 存储过程创建层次结构树并以 xml 形式返回

xml - 带参数的递归 XSL 模板调用

python - 如何在XPath中选择多个标签?

xml - 如何从其内部子组件正确组装一个有效的 xlsx 文件?

c# - 使用 session 状态在 ASP.NET 中创建用户登录和角色是一种不安全的方式

c# - 将 "row of data"从一个 C# 控制台应用程序传递到另一个 C# 控制台应用程序的最佳方法是什么?

asp.net - 从 asp.net 4 中的资源文件获取文本

asp.net - 将 SQL 查询存储在资源文件中是一种不好的做法吗?