有没有办法限制根 xml 元素名称应该与 XSD 文件中的相同?
Posted
技术标签:
【中文标题】有没有办法限制根 xml 元素名称应该与 XSD 文件中的相同?【英文标题】:Is there any way to restrict root xml element name should be same as in XSD file? 【发布时间】:2021-10-15 04:59:15 【问题描述】:我有一个带有这样标签的 XML 文件..
<DataSt> --ROOT TAG
<Track>
....
</Track>
</DataSt>
我有这样开始的 XSD 文件..
<?xml version="1.0"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="DataSt">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="Track">
<xs:complexType>
<xs:sequence>
.................
我想在 XSD 文件中定义一些规则,根标签名称应始终与“DataSt”相同
例如如果
<DataSt1> --ROOT TAG(wrong)
<Track>
....
</Track>
</DataSt1>
它不应该被成功验证,它应该有助于抛出错误。
我正在使用 SSIS 在 XSD 文件的帮助下从 XML 传输数据。如果根标签与 XSD 文件中定义的不同,则 SSIS 在读取 xml 文件后只是跳过它,但不会抛出错误。
我对 XML 和 XSD 代码了解不多。请帮助解决这个问题。谢谢!!!
【问题讨论】:
这可能取决于解析器/验证器 API,如果根元素与任何架构***元素不匹配,您是否以及如何配置为进行严格验证并引发错误或警告。我认为,如果您将 system.xml.schema.xmlschemavalidationflags 设置为报告警告,那么使用 .NET API 会在您的情况下收到警告。我不知道 SSIS 在后台使用了什么。 【参考方案1】:XSD 的设计者选择不这样做(有很多争论)。据我了解,其基本原理是模式定义了元素的有效性,而不是文档的有效性(但 xs:ID/IDREF 机制破坏了该原则)。
一些架构验证 API 允许您限制***元素应该是什么。例如,如果您从命令行使用 Saxon 进行验证,则有一个选项 -top
(参见 https://www.saxonica.com/documentation10/index.html#!schema-processing/commandline)
【讨论】:
以上是关于有没有办法限制根 xml 元素名称应该与 XSD 文件中的相同?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用混合值(整数和字符串)限制更改XML / XSD中的complexType?