c# - 启用片段级一致性时忽略 XML 模式验证?

标签 c# .net xsd xml-validation

从我对 XML 和 Schema 验证的了解来看,似乎当 fragment-level conformanceXMLReader 启用例如,XML 源停止针对任何 included Schemas 进行验证.

但是我无法从 MSDN 文档中验证这一点,因为它似乎没有根据一致性级别描述 XSD 架构行为。另外,如果我认为这个问题是真的,我找不到解决方法。

我想知道如何根据 XSD 模式验证 XML 片段

在我的例子中,我正在验证 XHTML 1 Strict Schema .事实上,像

这样的弃用 HTML 标签没有被标记为无效,这是我相信片段一致性忽略模式的部分原因。此外,当我在同一场景中使用文档级一致性时,会成功标记有效性错误。

For a code sample of the type of validation scenario I'm using see this .

最佳答案

我想我在 this MSKB article 中找到了答案标题很奇怪HOW TO: Validate XML Fragments Against an XML Schema in Visual C#.NET文章底部指出:

NOTE: Only the type declarations and the top-level elements in the XML schema are validated against an XML schema. Subelements are considered as local and therefore cannot be validated. In order to validate a subelement, declare a top-level element and refer to that.

我认为该段中存在错误,其目的是声明 XML 中的顶级元素schema 文档/片段 针对 XML 架构进行验证

因为 Microsoft 代码示例在顶层开始其片段(而不是任意地在文档内),所以它与验证一起使用。但是,就我而言,我采用的是中间文档结构。

如果我的解释有误,请纠正我。


解决方法/解决方案

我的解决方法是将我的片段填充到顶级元素中以进行验证。

换句话说,如果我正在处理 XHTML 片段:

<div>MY FRAGMENT</div>

我可以将其打包以验证到 conform to the XHTML Strict Schema作为:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>HTML fragment enclosed, conforming to XHTML 1.0 Strict Template.</title>
</head>
<body>

    <div>MY FRAGMENT</div>

</body>
</html>

这个解决方案对我有用,所以我会在过渡期间使用它;我不确定是否存在更好的解决方案。

关于c# - 启用片段级一致性时忽略 XML 模式验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3632767/

相关文章:

c# - 授权具有角色的属性不起作用?

c# - 从后面的代码访问 javascript 函数

c# - 为什么 C# .NET SortedList<T1, T2> 实际上没有 ElementAt?

c# - 在 C# 中将关系数据库映射到 XML

xml - 用于从 XML 文件中删除标签的 XSLT

c# - 将 XSD 文件转换为 C# 可序列化类

c# - 从 ASP.Net HTTPHandler - Page.Response 对象编写 cookie?

c# - 在 WPF 中绘制动态多边形

c# - 任务不会被垃圾收集

.net - SqlDataReader 一次仅评估一行