问题标签 [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.

0 投票
3 回答
1178 浏览

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 是否有效,如果它在另一个系统中没有正确显示,用户很快就会发现 - 他们过去常常手动加载它:)

0 投票
1 回答
546 浏览

.net - 具有有效 XmlSchema 的 IXmlSerializable(未声明 XMLSchema:schema' 元素..)

我正在尝试实现 IXmlSerializable。我的类实现了可序列化并编写了一个字符串。我希望能够使用 XsdDataContractExporter(标准模式)导出对象图模式。

该类序列化为一个简单的 xml。

我的GetSchema实现,对应XmlSchemaProvider属性如下。

我需要能够生成和导出模式。

我收到以下错误:

当我尝试导出架构时。

0 投票
2 回答
1252 浏览

xml - 如何编译使用 DataSet (xs:schema) 的模式?

我在 C# 中创建了最简单的 Web 服务:

生成的模式 (Wsdl) 如下所示:

请注意,架构不包含任何导入/包含元素。

我正在尝试将此架构加载到 ac# System.Xml.XmlSchema 并将其添加到 System.Xml.XmlSchemaSet:

最后一行抛出此异常:

这有点道理:.Net 生成的模式使用“s:schema”类型,该类型在未导入的模式中声明。

  1. 为什么 .Net 会创建无效架构?
  2. 无论如何如何编译架构?我所做的是在http://www.w3.org/2001/XMLSchema中下载架构并将其添加到 XmlSchemaSet 中。这不起作用,因为该在线模式包含 DTD 定义。我不得不手动删除它,现在一切正常。这有意义还是我错过了什么?
0 投票
1 回答
219 浏览

xsd - 获取 SchemaSet 中的所有派生类型

我需要在给定的 SchemaSet 中找到所有类型。

我今天要做的是:

1) 迭代 SchemaSet.GlobalTypes.Values 中的所有 XmlSchemaTypes。

2) 迭代 XmlTypeCode 枚举的所有值

我发现这是不够的,因为某些 XmlSchemaTypes 可以在模式的深处定义(即不是作为 GlobalType)。

.NET 中是否有办法获取所有未定义为 GlobalTypes 的类型?

0 投票
2 回答
2181 浏览

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 的正确方向。

0 投票
3 回答
4097 浏览

c# - 使用 XDocument.Validate 验证 Xml 架构时,XmlSchemaValidationException.LineNumber 和 LinePosition 为 0

我正在尝试使用带有 XDocument.Validate 扩展方法的 Xml 架构来验证 Xml 片段。每当使用无效的 Xml 片段时,ValidationEventHandler 都会正确触发,但是 XmlSchemaValidationException 的 LineNumber 和 LinePosition 属性都是 0。

在上面的示例中,我的目标是使用 validationErrors 通知用户验证失败的原因。但是,当使用此方法时,LineNumber 和 LinePosition 都为 0。

该片段看起来很简单,并且在针对有效和无效 Xml 片段进行验证方面似乎可以按预期工作。

提前致谢!

0 投票
2 回答
17254 浏览

powershell - 如何指示 PowerShell 对 XmlSchemaSet 等 .NET 对象进行垃圾收集?

我创建了一个 PowerShell 脚本,它遍历大量 XML Schema (.xsd) 文件,并为每个文件创建一个 .NETXmlSchemaSet对象,调用Add()并向Compile()其添加架构,并打印出所有验证错误。

该脚本可以正常工作,但是某处存在内存泄漏,如果在 100 多个文件上运行,它会消耗千兆字节的内存。

我基本上在一个循环中做的是以下内容:

(可以在此要点中找到重现此问题的完整脚本:https ://gist.github.com/3002649 。只需运行它,然后在任务管理器或进程资源管理器中观察内存使用量的增加。)

受一些博客文章的启发,我尝试添加

我也试着拿起$schemaAdd()

这些似乎有一些效果,但仍然存在泄漏。我假设较旧的实例XmlSchemaSet仍在使用内存而没有被垃圾收集。

问题:我如何正确地教垃圾收集器它可以回收上面代码中使用的所有内存?或者更笼统地说:我怎样才能用有限的内存来实现我的目标?

0 投票
3 回答
2782 浏览

c# - System.Xml.XmlSchemaSet compile() 填充包含的架构 TargetNamespace

我有两个 xml 架构:
1)infrastructureRoot.xsd:

2) 数据类型-base.xsd

我使用以下 C# 代码加载包含所有内容的根架构:

执行后 "targetNamespace" 的值等于 "urn:hl7-org:v3" ,这与原始模式 "datatypes-base.xsd" 不同并破坏了验证。有人可以帮我解决吗?

0 投票
1 回答
936 浏览

.net - 为什么 XmlSchemaSet 明确地将 targetNamespace 设置为变色龙模式

例如,我有 2 个 Xml 模式:

a.xsd:

b.xsd:

第二个模式没有targetNamespace并用作变色龙模式。

我正在尝试使用 XmlSchemaSet 预加载这些模式:

但是在我这样做之后,两个模式都有“测试”目标命名空间。我希望实例化的模式对象应该等于源模式,但模式“b.xsd”并非如此。为什么它的行为如此,有什么方法可以禁用这种行为?

0 投票
1 回答
190 浏览

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 文件中,这就是为什么我希望自动处理它,而不是为每个用户输入字段编写验证例程。

提前致谢。