我对XmlReader类的体验现在已经混合了。我想澄清一下使用XmlReader类验证Xml数据时的一些基本疑问。
XmlSchemaValidationFlags类中有一个属性,称为XmlSchemaValidationFlags.ProcessSchemaLocation
因此,如果我确实拥有下面给出的xml文件中指定的xsd文件的位置,是否需要将xsd文件添加到XmlSchemaSet类?我已将xsd文件保存在与xml文件相同的目录中。
<?xml version="1.0" encoding="utf-8"?>
<value_tables xmlns="urn:values-schema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:values-schema values.xsd"
>
<table name="Calibrated">
<value num="0">No</value>
<value num="1">Yes</value>
</table>
</value_tables>
Q2。此外,是否可以从xml文档中检索此文件的名称而不是硬编码?
答案 0 :(得分:1)
您通常需要提供一个解析器(google EntityResolver),它会告诉解析器在哪里可以找到外部引用的文档。是的,您可以让解析器直接从命名空间URI中获取位置信息(但不建议这样做;我想我记得有些XBRL分类法使用这种方法IIRC)。
可能有也可能没有默认的EntityResolver实现做简单的事情(例如:查看单个目录或从URI下载为http url),但根据我的经验,我总是不得不以某种方式编写EntityResolve 。反正这不是很多工作
答案 1 :(得分:1)
只是一句忠告。作为XML输入数据的验证器,您最终应该控制架构源。你怎么知道你在验证什么?
有一些用例,其中schemaLocation属性很有用。例如,Spring框架对同一名称空间使用不同的URL,以允许用户为配置文件指定默认或特定于版本的模式支持。但URL始终是符号的,并且间接指向受控的模式相关资源。
但是,如果用例是获取有关XML文档中元素和属性的架构相关信息,则不适用。