【发布时间】:2013-11-07 16:17:05
【问题描述】:
大家好,我有一个场景
两个 XML 文件
一个 xml 说“Books.xml”将为 DATASET 创建架构,我将使用其他 XML 文件将数据加载到 DATASET 中,第二个文件中的所有数据都将插入到 DATASET 中
我已经完成了这些事情,但我卡在验证 XML 我想验证第二个 xml 文件 表示输入数据集的数据应该根据 DATASET 模式完全有效,该模式将根据 First XML
我已经使用 XSD 尝试过,但我不确定 XSD 是否能够验证数据类型,比如如果我必须输入数字并且我的 xml 中有一个字符串,它应该会引发异常
我有这样的xml
<DATA>
<HISTORY>
<book1>SOmebook</book1>
</HISTORY>
<POETRY>
<book2>Books</book2>
</POETRY>
</DATA>
我正在使用 VisualStudio 生成我的 XSD
使用类似这样的方法来验证它
XmlReaderSettings settings = //dont know exact settings
string data = null;
XmlReader Reader = XmlReader.Create(File.Open("C:\books.XML", FileMode.Open), settings, data);
DataSet ds = new DataSet();
ds.ReadXml(Reader);
【问题讨论】:
-
XML 模式 确实 验证简单类型,例如
xs:string、xs:decimal、xs:integer、xs:boolean、'xs:date,xs:time@ 987654330@Validate()` 方法可让您指定架构。如果验证失败,您就知道您的 XML 无效。自定义对象类型并不容易验证。对我来说,创建自定义验证器似乎有点极端。 -
oki 感谢您抽出时间,andrei,但您能告诉我如何使用 linq2xml 验证,因为我在 xml 中是 = null 事情刚刚开始
-
看看这个link。它显示了一个简单的示例,用于根据 Schema 验证 XDocument 以及如何处理错误。在这个例子中,Schema 是硬编码的,但从文件中加载它并不难。查看XDocument class 了解更多信息。关于如何使用这个类有很多例子。希望这会有所帮助。
-
再看看你的 XML,我必须问一下
<book1>和<book2>标记是否故意创建不同。您想明确区分历史书籍和诗歌书籍吗?如果是这样,我会建议更有意义的名称(例如<poetrybook>)。如果没有,您可能希望使用“通用”<book>。 -
这只是一个虚拟 xml 原始 xml 与此有很大不同,我已经通过您的帮助实现了我想要的,并且在下面的代码中进行了一些更改以满足我的需求,非常非常