C# 中的 MemoryStream Xml 架构验证失败

2024-01-21

这是我的功能。

如果将 MemoryStream 传递给 XmlReader,有时它不会验证正确的 xml 文件。我将 XmlDocument 对象存储在内存中,我想根据最终用户提供的 xsd 架构文件对其进行验证。

ValidateSchema1(string XMLPath, string XSDPath)
    {
        XmlDocument xmlDocument = new XmlDocument();

        xmlDocument.Load(XMLPath);

          using (MemoryStream mstream = new MemoryStream())
          {
              //StreamWriter writer = new StreamWriter(mstream);
              xmlDocument.Save(mstream);
              mstream.Seek(0, SeekOrigin.Begin);
              XmlSchemaSet sc = new XmlSchemaSet();

              // Add the schema to the collection.
              sc.Add(null, XSDPath);

              // Set the validation settings.
              XmlReaderSettings settings = new XmlReaderSettings();
              settings.ValidationType = ValidationType.Schema;
              settings.Schemas = sc;
              settings.ValidationEventHandler += ValidationCallBack;

              // Create the XmlReader object.

              // Not woking
              XmlReader reader = XmlReader.Create(mstream, settings);

              // Working
              //XmlReader reader = XmlReader.Create(new StringReader(xmlDocument.InnerXml), settings);

              // Working
              //XmlReader reader = XmlReader.Create(XMLPath, settings);

              // Parse the file. 
              while (reader.Read()) ;
          }

    }

这可能有效:http://www.experts-exchange.com/Programming/Languages/.NET/Visual_CSharp/Q_23387252.html http://www.experts-exchange.com/Programming/Languages/.NET/Visual_CSharp/Q_23387252.html
这有效如何在运行时根据 xsd 验证 xml,而不将 xsd 文件保存在本地文件夹上? https://stackoverflow.com/questions/3085526/how-to-validate-on-runtime-xml-against-xsd-without-save-the-xsd-file-on-local

编辑 1:修复了您提供的代码,现在代码可以正常工作,验证了我的 2 个文件。您收到错误的原因是您尝试使用自身验证 Xsd 而根元素不存在。请亲自查看解决方案。

public void Xsd_whithout_saved()  
    {  
        XmlDocument xmlDoc = new XmlDocument();  
        xmlDoc.Load(@"file.xsd");  
        //In the futute, strArquivoInteiro will be fullfill by xsd comming from   database as nvarchar(max) and I will //not be allowed to save as a file locally    
        string strArquivoInteiro = xmlDoc.OuterXml;  

        byte[] byteArray = Encoding.ASCII.GetBytes(strArquivoInteiro);
        MemoryStream streamXSD = new MemoryStream(byteArray);
        //<<<
        streamXSD.Position = 0;
        StreamReader readerXsd = new StreamReader(streamXSD);

        XmlReaderSettings settings = new XmlReaderSettings();
        settings.ValidationEventHandler += this.MyValidationEventHandler;

        settings.ValidationType = ValidationType.Schema;
        settings.Schemas.Add(null, XmlReader.Create(readerXsd));
        settings.CheckCharacters = true;

        XmlReader XmlValidatingReader = XmlReader.Create(@"file.xml", settings);

        XmlTextReader Reader = new XmlTextReader(@"file.xsd");
        //Created another reader for xml to use for validation
        XmlTextReader Reader2 = new XmlTextReader(@"file.xml");

        XmlSchema Schema = new XmlSchema();

        //IN THIS LINE I RECEIVED THE XmlException "Root Element is Missing" and I can't understand the reason
        //This was the first problem, a xsd root element isn't equal to an xml root element , and you where trying to validate and xsd with xsd here, and of course the error.
        Schema = XmlSchema.Read(Reader, MyValidationEventHandler);

        XmlValidatingReader ValidatingReader = new XmlValidatingReader(Reader2);

        ValidatingReader.ValidationType = ValidationType.Schema;

        ValidatingReader.Schemas.Add(Schema);

        try
        {

            XmlValidatingReader.Read();
            XmlValidatingReader.Close();

            ValidatingReader.ValidationEventHandler += MyValidationEventHandler;

            while ((ValidatingReader.Read()))
            {

            }

            ValidatingReader.Close();
        }
        catch (Exception ex)
        {
            ValidatingReader.Close();
            XmlValidatingReader.Close();
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 中的 MemoryStream Xml 架构验证失败 的相关文章

  • 隐式将 string 转换为 string_view

    void Foo1 string view view string str one two three Foo1 one two three Implicitly convert char to string view Foo1 str I
  • 获取枚举实例的名称[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 假设我有这个枚举 public enum MyEnum ValueOne 1 ValueTwo 2 ValueThree 3 然后
  • Java 相当于 C# 的 async/await?

    我是一名普通的 C 开发人员 但偶尔也会使用 Java 开发应用程序 我想知道 Java 中是否有相当于 C async await 的东西 简单来说 java 相当于 async Task
  • 如何将 int.TryParse 与可为空的 int 一起使用? [复制]

    这个问题在这里已经有答案了 我正在尝试使用 TryParse 来查找字符串值是否为整数 如果该值为整数 则跳过 foreach 循环 这是我的代码 string strValue 42 if int TryParse trim strVal
  • Swashbuckle 在 ASP.NET Core 中失败并出现 NotSupportedException 异常

    我跟着这个关于如何在我的 asp net core 2 2 项目中添加 swashbuckle 当我运行该项目时 我收到以下错误 处理请求时发生未处理的异常 NotSupportedException HTTP 方法 GET 和路径 id
  • 当假设 [[assume]] 包含 UB 时会发生什么?

    在 C 23 中 assume expression 属性使得如果表达 is false 行为未定义 例如 int div int x int y assume y 1 return x y 这会编译成相同的代码 就像y一直是1 div i
  • 在 C 的公共 API 函数中使用枚举参数是个好主意吗?

    我正在设计一个 C API 其中必须提供一种设置一些双值选项的方法 为了识别选项 我使用以下枚举 typedef enum OptionA OptionB Option 使用是一个好主意吗Option作为公共 API 函数中的参数类型 in
  • 清理 STL 指针列表/向量

    您可以想出的最短的 C 块是多少来安全地清理std vector or std list指针 假设您必须对指针调用删除 list
  • 三元运算的结果(类型)是什么?

    三元运算是否返回副本或引用 我检查了以下代码 vector
  • c++ 最大 std::string 长度由堆栈大小或堆大小决定?

    正如问题中所问 std string myVar 它可以容纳的最大字符是由堆栈还是堆决定的 谢谢 默认情况下 分配的内存为std string是动态分配的 注意std string has a max size 函数返回实现支持的最大字符数
  • SolrNet:尝试添加和提交时 SolrConnectionException (400) 错误请求

    我已经到了 SolrNet 执行 Add 方法的地步 但是当我尝试 Commit 时 我收到了错误 以下是我的 schema xml 模型 调用它的代码以及我得到的错误 更奇怪的是 尽管出现错误 但在我重新启动 Tomcat 后 该模型仍会
  • 使用 C 通过引用传递数组

    是的 我已经阅读了这个问题和答案 在 C 中通过引用传递数组 https stackoverflow com questions 1106957 pass array by reference in c 我有一个类似的问题 并从该问题中实现
  • 如何用C语言创建字典?

    我正在用 C 语言编写一个微控制器 作为它的一部分 我想在 7 段显示器上显示某些字母 每个字母都有一个对应的数字 使 7 段显示屏显示该字母 它没有真正的模式 因为数字只是通过将显示字母所需的 7 段显示器上的位相加而成 因此如果我可以创
  • 在.NET MVC中,有没有一种简单的方法来检查我是否在主页上?

    如果用户从主页登录 我需要采取特定的操作 在我的 LogOnModel 中 我有一个隐藏字段 Html Hidden returnUrl Request Url AbsoluteUri 在我的控制器中 我需要检查该值是否是主页 在下面的示例
  • 我们还需要迭代器设计模式吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Visual Studio 扩展找不到所需的程序集

    我为 Visual Studio 2013 编写了一个扩展 因为该死的组合框错误 https stackoverflow com questions 7800032 cancel combobox selection in wpf with
  • 如何在 C# 中使用 Selenium WebDriver 获取当前窗口的 URL?

    在我的应用程序中 登录时 它会导航到另一个页面 现在我需要在 selenium C 中使用 WebDriver 获取新的 URL 我找不到任何函数来执行此操作 我努力了driver Url driver getLocation and dr
  • 同时使用多个控制台

    是否有捷径可寻 我现在仅使用控制台测试我的网络应用程序 最好的办法是从一个项目中拥有多个控制台 然后按一下 立即调试 菜单项 我可以像过去一样使用多个项目 但这似乎很笨拙 理想情况下 我可以启动多个控制台实例 从同一线程运行很好 并且让它们
  • printf 右对齐括号内的数字

    我正在编写一个程序 显示数组中的所有信息 它必须以括号中的数组索引开头 例如 2 并且它们必须彼此正确对齐 如果只是数字 我知道你可以这样做 printf 10d index 但是用括号括起来会得到以下输出 1 2 10 11 当我真正希望
  • C++ 中带逗号的表达式的执行顺序 [重复]

    这个问题在这里已经有答案了 我的理解是这个词j i将在之前执行 i在声明中 j i i C 标准是否保证j i将在之前执行 i在循环 for auto i std next begin j begin i end j i i 逗号运算符引入

随机推荐

  • Lucene.Net 和孵化状态

    我正在评估各种选项 以使我们的 Net 网站上的搜索功能更加强大 我需要研究一下我们是否购买软件 硬件 例如 Google Search Appliance GSA 还是使用 Lucene Net 等框架来开发解决方案 我们是一家初创公司
  • 阻止 Xcode 从静态库中删除未使用的符号

    我已经构建了一个静态库 我的 iOS 二进制文件正在链接其中 静态库的代码剥离已关闭 等等 我可以看到存档中的符号 通过 nm 因此 我将该库作为框架链接到我的应用程序中 但是 我实际上并没有直接调用该函数 因此 我可以看到我在二进制文件中
  • 如何将所有请求重定向到 laravel 5 中的 public/ 文件夹

    我有一个经典的 Laravel 5 项目结构 我需要将所有请求重定向到public 我处于经典的托管环境中 所以public 是我的文档根目录的子文件夹 我想这可以通过 htaccess 完成 但我仍然需要弄清楚如何完成 有人可以帮忙吗 T
  • Spring 上的嵌套事务

    在使用嵌套 Spring 事务时 我发现了一些奇怪的行为 当在同一个类中 一个方法注释为 Transactional调用另一个方法也注释为 Transactional不使用第二个注释 让我们考虑下面的类 public class Main
  • 如何在 Windows 7 x64 上的 python 3.4 中使用 OpenCV? [复制]

    这个问题在这里已经有答案了 I have windows 7 x64 and python 3 4 我尝试使用cv2 module import numpy as np import cv2 img cv2 imread messi5 jp
  • 如何为maven中属性集下声明的属性设置类路径

    我正在努力从 ant 构建工具转换为 Maven 工具 Ant build xml 已通过以下方式初始化属性
  • parse_dates 如何与 pd.read_sql_query 一起使用

    从 MySQL 数据库检索数据时 Pandas parse date 应该如何工作 的文档熊猫0 23 https pandas pydata org pandas docs stable generated pandas read sql
  • DAX 中的递归

    我不知道这是否可能 但我希望能够创建一个计算列 其中每行都依赖于其上方的行 一个典型的例子是斐波那契数列 https en wikipedia org wiki Fibonacci number 其中序列由递归关系定义F n F n 1 F
  • 电子邮件地址的正则表达式不起作用

    我正在尝试使用以下代码检查某些电子邮件地址是否正确 NSPredicate regexMail NSPredicate predicateWithFormat SELF MATCHES if regexMail evaluateWithOb
  • 存储倒排索引

    我正在从事一个关于信息检索的项目 我使用 Hadoop Python 制作了完整倒排索引 Hadoop 将索引输出为写入文件的 单词 文档列表 对 为了快速访问 我使用上面的文件创建了一个字典 哈希表 我的问题是 如何在磁盘上存储这样一个具
  • 为什么属性“禁用”而不是“启用”

    我总感觉disabledHTML 属性
  • 为什么 ui.item.attr("id") 返回未定义的值?

    我正在处理之间的可排序 li of ul 但当我试图得到ui item attr id 我未定义 但其他变量运行良好 例如 this attr id and ui sender attr id 但我正在搜索的索引 ul 元素从哪里拖动 我的
  • Rails Gem Devise 是否有解决方案允许用户拥有多个电子邮件?

    我正在寻找一种解决方案 允许我的应用程序上的用户拥有超过 1 封电子邮件 这应该与 Facebook LinkedIn 和 Quora 类似 一个帐户可以有多个电子邮件地址 其中 1 个作为主要电子邮件地址 是否有可用的设备交钥匙解决方案
  • 正确的 ARIA 处理面包屑导航

    可以采取哪些措施来提高面包屑菜单的可访问性 类似于 ul class breadcrumbs li a href Home a li li a href news News a li li class unavailable a href
  • Blazor - Web 组件 - WebAssembly - 微前端

    我正在研究微前端并能够使用不同技术构建功能 到目前为止 创建 Web 组件并在 Monolith 上使用它们是我发现的最佳方法 研究创建 Web 组件并在不同服务中提供模块的不同方法是一种有趣的体验 使用 Blazor 查看 WebAsse
  • 为什么添加简单的 SQL 查询作为 Power BI 数据源会阻止本机查询折叠?

    我已经添加了SQL数据源 然后 我没有选择表 而是输入了以下查询 SELECT ID NAME AGE FROM STUDENTS 当我右键单击该步骤时 我看到本机查询选项被禁用 为什么添加简单的 SQL 查询作为 Power BI 数据源
  • MS Access 准备好的语句

    是否可以在 MS Access 中对 VBA 中的本地表执行准备好的语句 如下所示 UPDATE part SET part description WHERE part id 如果是这样 它是如何完成的 Dim db As DAO Dat
  • Java 正则表达式帮助:捕获键值对

    我正在尝试从具有以下形式的字符串中捕获键值对 a0 d235 a1 2314 com1 abcd com2 a b c d 使用来自的帮助这个帖子 https stackoverflow com questions 168171 regul
  • iOS - 循环单元格并检索数据

    抱歉 我对 iOS 开发还很陌生 我有一个UITableView从单个 XiB 笔尖拉出的单元进行设置 我在笔尖中创建了一个开 关开关 并且我试图保存开关的状态viewWillDisappear我拥有的细胞数量 准确地说是 6 个单元 如何
  • C# 中的 MemoryStream Xml 架构验证失败

    这是我的功能 如果将 MemoryStream 传递给 XmlReader 有时它不会验证正确的 xml 文件 我将 XmlDocument 对象存储在内存中 我想根据最终用户提供的 xsd 架构文件对其进行验证 ValidateSchem