问题标签 [xmlschemaset]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 处理不良 xml 数据的正确方法
我有一个小的 c# windows 服务,它定期从 web 服务中提取 xml 并将数据存储在数据库表中。
不幸的是,它失败了,因为 Web 服务中偶尔会有错误的数据——字符串而不是小数。我对 Web 服务没有任何控制权(来自我们无法更改的软件的未经验证的用户输入),但我想记录错误数据以便重新输入。
这是看起来像这样的简单数据:
该表只有两列,COL1 (NUMBER, 10)、COL2 (NUMBER, 10,2)。
我正在使用验证 XmlReader 和这个 XSD:
然后是 dataset.ReadXml() 和 Update() 数据集。
每当遇到错误数据时,我都会收到以下异常:
System.Xml.Schema.XmlSchemaValidationException 未处理
Message="'COL1' 元素无效 - 根据其数据类型,值 'A40' 无效' http://www.w3.org/2001/XMLSchema:decimal ' - 字符串 'A40' 不是有效的十进制价值。”
我可以想出几种解决问题的方法,但它们都感觉有点笨拙,我想学习一些更优雅的东西,并提高我的知识。到目前为止,这是我想出的:
- 在加载到验证 XML 阅读器之前预处理 Web 服务提供的 XML,完全删除任何坏节点。
- 捕获 XmlSchemaValidationExceptions 并尝试从它们优雅地继续(不确定那个)
- 不要使用验证 XML 阅读器,而是在将未经验证的 xml 加载到数据集时捕获异常。(再次不确定)
- 在数据集中有字符串列,并忽略错误数据,直到我更新它,并捕获数据库拒绝的任何内容。
- 去用大槌站在用户面前,直到他们学会第一次做对(太耗时)
- 别的东西?
更新:数据可能很糟糕,因为它来自不验证 COL1 的用户输入的应用程序 - 但 COL2 中的数字计算正确,并且 COL1 应该对应于不同的系统。应记录任何无效条目,以便更正。数据写入数据库后,另一个系统会验证 COL1 是否有效,如果它在另一个系统中没有正确显示,用户很快就会发现 - 他们过去常常手动加载它:)
.net - 具有有效 XmlSchema 的 IXmlSerializable(未声明 XMLSchema:schema' 元素..)
我正在尝试实现 IXmlSerializable。我的类实现了可序列化并编写了一个字符串。我希望能够使用 XsdDataContractExporter(标准模式)导出对象图模式。
该类序列化为一个简单的 xml。
我的GetSchema实现,对应XmlSchemaProvider属性如下。
我需要能够生成和导出模式。
我收到以下错误:
当我尝试导出架构时。xml - 如何编译使用 DataSet (xs:schema) 的模式?
我在 C# 中创建了最简单的 Web 服务:
生成的模式 (Wsdl) 如下所示:
请注意,架构不包含任何导入/包含元素。
我正在尝试将此架构加载到 ac# System.Xml.XmlSchema 并将其添加到 System.Xml.XmlSchemaSet:
最后一行抛出此异常:
这有点道理:.Net 生成的模式使用“s:schema”类型,该类型在未导入的模式中声明。
- 为什么 .Net 会创建无效架构?
- 无论如何如何编译架构?我所做的是在http://www.w3.org/2001/XMLSchema中下载架构并将其添加到 XmlSchemaSet 中。这不起作用,因为该在线模式包含 DTD 定义。我不得不手动删除它,现在一切正常。这有意义还是我错过了什么?
xsd - 获取 SchemaSet 中的所有派生类型
我需要在给定的 SchemaSet 中找到所有类型。
我今天要做的是:
1) 迭代 SchemaSet.GlobalTypes.Values 中的所有 XmlSchemaTypes。
2) 迭代 XmlTypeCode 枚举的所有值
我发现这是不够的,因为某些 XmlSchemaTypes 可以在模式的深处定义(即不是作为 GlobalType)。
.NET 中是否有办法获取所有未定义为 GlobalTypes 的类型?
c# - xmldocument 和嵌套模式
使用 c# 和 .net 3.5 我正在尝试针对包含的架构验证 xml 文档。
架构及其包括如下
Schema1.xsd -> 包含另一个.xsd
another.xsd -> 包括 base.xsd
当我尝试将 Schema1.xsd 添加到 XmlDocument 时,我收到以下错误。
类型“YesNoType”未声明或不是简单类型。
我相信我收到此错误是因为当我加载 Schema1.xsd 架构时未包含 base.xsd 文件。
我正在尝试使用 XmlSchemaSet 类,并将 XmlResolver uri 设置为模式的位置。
注意:所有模式都位于同一目录 E:\Dev\Main\XmlSchemas
这是代码
任何人都可以指出我在针对具有嵌套包含的架构验证 xmldocument 的正确方向。
c# - 使用 XDocument.Validate 验证 Xml 架构时,XmlSchemaValidationException.LineNumber 和 LinePosition 为 0
我正在尝试使用带有 XDocument.Validate 扩展方法的 Xml 架构来验证 Xml 片段。每当使用无效的 Xml 片段时,ValidationEventHandler 都会正确触发,但是 XmlSchemaValidationException 的 LineNumber 和 LinePosition 属性都是 0。
在上面的示例中,我的目标是使用 validationErrors 通知用户验证失败的原因。但是,当使用此方法时,LineNumber 和 LinePosition 都为 0。
该片段看起来很简单,并且在针对有效和无效 Xml 片段进行验证方面似乎可以按预期工作。
提前致谢!
powershell - 如何指示 PowerShell 对 XmlSchemaSet 等 .NET 对象进行垃圾收集?
我创建了一个 PowerShell 脚本,它遍历大量 XML Schema (.xsd) 文件,并为每个文件创建一个 .NETXmlSchemaSet
对象,调用Add()
并向Compile()
其添加架构,并打印出所有验证错误。
该脚本可以正常工作,但是某处存在内存泄漏,如果在 100 多个文件上运行,它会消耗千兆字节的内存。
我基本上在一个循环中做的是以下内容:
(可以在此要点中找到重现此问题的完整脚本:https ://gist.github.com/3002649 。只需运行它,然后在任务管理器或进程资源管理器中观察内存使用量的增加。)
受一些博客文章的启发,我尝试添加
我也试着拿起$schema
从Add()
做
这些似乎有一些效果,但仍然存在泄漏。我假设较旧的实例XmlSchemaSet
仍在使用内存而没有被垃圾收集。
问题:我如何正确地教垃圾收集器它可以回收上面代码中使用的所有内存?或者更笼统地说:我怎样才能用有限的内存来实现我的目标?
c# - System.Xml.XmlSchemaSet compile() 填充包含的架构 TargetNamespace
我有两个 xml 架构:
1)infrastructureRoot.xsd:
2) 数据类型-base.xsd
我使用以下 C# 代码加载包含所有内容的根架构:
执行后 "targetNamespace" 的值等于 "urn:hl7-org:v3" ,这与原始模式 "datatypes-base.xsd" 不同并破坏了验证。有人可以帮我解决吗?
.net - 为什么 XmlSchemaSet 明确地将 targetNamespace 设置为变色龙模式
例如,我有 2 个 Xml 模式:
a.xsd:
b.xsd:
第二个模式没有targetNamespace并用作变色龙模式。
我正在尝试使用 XmlSchemaSet 预加载这些模式:
但是在我这样做之后,两个模式都有“测试”目标命名空间。我希望实例化的模式对象应该等于源模式,但模式“b.xsd”并非如此。为什么它的行为如此,有什么方法可以禁用这种行为?
vb.net - XSD 数据验证在 .Net 4.0 中是否可靠?
我使用服务提供者提供的 WSDL 和几个 XSD 文件编写了一个公共 SOAP Web 服务的客户端。我想找到一种简单的方法来根据 XSD 文件验证用户数据,因此我使用了 MSDN 中的标准示例,对 XSD 文件使用 XmlSchemaSet、XmlReader 和验证例程来捕获错误消息。(代码可在http://msdn.microsoft.com/en-us/library/as3tta56.aspx) 它适用于某些数据元素,但其他数据元素在无效时不会引发错误。如果我包含“ValidationFlags = ValidationFlags 或 XmlSchemaValidationFlags.ReportValidationWarnings”,则会收到很多警告,例如“找不到元素 'MyRequest' 的架构信息”、“找不到属性 'TheDate' 的架构信息”、等等,但我可以在 VS2010 IDE 中打开 XSD 文件,它的 XML Schema Explorer 会显示这些元素和属性。
因此,对于熟悉以这种方式在 VS2010 中验证 XML 数据的人来说,我的主要问题是,XmlReader 验证可以处理的 XSD 文件的复杂性是否存在限制?目标命名空间的前缀是否会混淆 XmlReader?架构中定义了数千种复杂类型,分布在 7 个 XSD 文件中,这就是为什么我希望自动处理它,而不是为每个用户输入字段编写验证例程。
提前致谢。