xsd-validation 相关问题

XSD验证用于根据存储的架构验证XML文件。

NiFi中的ValidateXml处理器支持XSD版本1.1吗?

NiFi中的ValidateXml处理器支持XSD版本1.1吗?

回答 1 投票 0

无法在 XSD 中使用 Assert 元素

我是 XSD 架构验证的新手。我正在寻找适用于 XSD 架构的 if else 条件。在互联网上进行了大量搜索后,我发现了“assert”元素,我们可以在其中测试条件

回答 1 投票 0

为什么我的 xsd 没有在 C# 中自动引发必填字段异常

这是我的 XML 这是我的 XML <?xml version="1.0" encoding="utf-8"?> <Zones xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.keaneaustralia.com/Nts" xsi:schemaLocation="http://schemas.keaneaustralia.com/Nts Zones.xsd" version="1" major_version="434" minor_version="0" start_date="2023-07-09T00:00:00+10:00"> <Record long_desc="City Saver Zone"/> <Record logical="2" physical="1" short_desc="Zone 1" long_desc="Zone 1" is_city_saver="Yes" /> <Record logical="3" physical="2" short_desc="Zone 2" long_desc="Zone 2" is_city_saver="false" /> <Record logical="dt" physical="3" short_desc="Zone 3" long_desc="Zone 3" is_city_saver="false" /> <Record logical="5" physical="4" short_desc="Zone 4" long_desc="Zone 4" is_city_saver="false" /> <Record logical="6" physical="5" short_desc="Zone 5" long_desc="Zone 5" is_city_saver="false" /> </Zones> 这是我的XSD <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:tns="http://schemas.keaneaustralia.com/Nts" elementFormDefault="qualified" targetNamespace="http://schemas.keaneaustralia.com/Nts" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Zones" nillable="true" type="tns:ZoneCollection" /> <xs:complexType name="ZoneCollection"> <xs:complexContent mixed="false"> <xs:extension base="tns:DataElementOfZone" /> </xs:complexContent> </xs:complexType> <xs:complexType name="DataElementOfZone"> <xs:sequence> <xs:element minOccurs="0" maxOccurs="unbounded" name="Record" type="tns:Zone" /> </xs:sequence> <xs:attribute name="version" type="xs:int" use="required" /> <xs:attribute name="major_version" type="xs:int" use="required" /> <xs:attribute name="minor_version" type="xs:int" use="required" /> <xs:attribute name="start_date" type="xs:dateTime" use="required" /> <xs:attribute default="false" name="is_delta" type="xs:boolean" /> <xs:attribute default="0" name="delta_major_version" type="xs:int" /> <xs:attribute default="0" name="delta_minor_version" type="xs:int" /> </xs:complexType> <xs:complexType name="Zone"> <xs:attribute name="logical" type="xs:unsignedByte" use="required" /> <xs:attribute name="physical" type="xs:unsignedByte" use="required" /> <xs:attribute name="short_desc" type="xs:string" /> <xs:attribute name="long_desc" type="xs:string" /> <xs:attribute name="is_city_saver" type="xs:boolean" use="required" /> </xs:complexType> </xs:schema> 该文件正在通过验证,并且不会引发任何错误。当我检查调试模式时,attributeSchemaInfo 出现空引用异常。下面是验证 xml 的函数。它不会引发逻辑属性所需的异常和字段 is_city_saver 的类型错误,该字段只需要布尔值:true 和 false,而不是 yes 和 no。 private static bool ValidateXmlAgainstXsd(string xmlFilePath, string xsdFilePath, ILogger fileLogger) { try { int numErreur = 0; XmlSchemaSet schemaSet = new XmlSchemaSet(); schemaSet.Add(null, xsdFilePath); schemaSet.Compile(); XmlReaderSettings settings = new XmlReaderSettings(); settings.Schemas.Add(schemaSet); settings.ValidationType = ValidationType.Schema; settings.ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings | XmlSchemaValidationFlags.ProcessIdentityConstraints | XmlSchemaValidationFlags.ProcessInlineSchema; settings.ValidationEventHandler += (sender, e) => { LogValidationError(xmlFilePath, e.Message, e.Exception, e.Exception.LineNumber, e.Exception.LinePosition, e.Severity, fileLogger, ref numErreur); }; using (XmlReader reader = XmlReader.Create(xmlFilePath, settings)) { while (reader.Read()) { //process code } } return numErreur > 0 ? false : true; } catch (Exception ex) { Console.WriteLine($"Error validating XML '{xmlFilePath}' against XSD '{xsdFilePath}': {ex.Message}"); return false; } } 我稍微修改了您的代码,并注释掉/删除了 LogValidationError() 调用。 XSD 验证正在运行!请看下面。 我的猜测是问题正是与注释掉的LogValidationError()有关。 c# void Main() { string xmlFilePath = @"e:\Temp\Zones.xml"; string xsdFilePath = @"e:\Temp\Zones.xsd"; ValidateXmlAgainstXsd(xmlFilePath, xsdFilePath); } private static bool ValidateXmlAgainstXsd(string xmlFilePath, string xsdFilePath) { try { int numErreur = 0; XmlSchemaSet schemaSet = new XmlSchemaSet(); schemaSet.Add(null, xsdFilePath); schemaSet.Compile(); XmlReaderSettings settings = new XmlReaderSettings(); settings.Schemas.Add(schemaSet); settings.ValidationType = ValidationType.Schema; settings.ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings | XmlSchemaValidationFlags.ProcessIdentityConstraints | XmlSchemaValidationFlags.ProcessInlineSchema; settings.ValidationEventHandler += (sender, e) => { //LogValidationError(xmlFilePath, e.Message, e.Exception, e.Exception.LineNumber, e.Exception.LinePosition, e.Severity, fileLogger, ref numErreur); Console.WriteLine(e.Message); }; using (XmlReader reader = XmlReader.Create(xmlFilePath, settings)) { while (reader.Read()) { //process code } } return numErreur > 0 ? false : true; } catch (Exception ex) { Console.WriteLine($"Error validating XML '{xmlFilePath}' against XSD '{xsdFilePath}': {ex.Message}"); return false; } } 输出 The required attribute 'logical' is missing. The required attribute 'physical' is missing. The required attribute 'is_city_saver' is missing. The 'is_city_saver' attribute is invalid - The value 'Yes' is invalid according to its datatype 'http://www.w3.org/2001/XMLSchema:boolean' - The string 'Yes' is not a valid Boolean value. The 'logical' attribute is invalid - The value 'dt' is invalid according to its datatype 'http://www.w3.org/2001/XMLSchema:unsignedByte' - The string 'dt' is not a valid Byte value.

回答 1 投票 0

complexType设置abstract=“true”的XSD问题

在XSD文件中定义如下: 在 XSD 文件中定义如下: <xs:element name="AdditionalData" type="AddData" minOccurs="0"> <xs:alternative test="@Type = 'Woodham'" type="AddDataWoodham"/> </xs:element> <xs:complexType name="AddData" abstract="true"/> <xs:complexType name="AddDataWoodham"> <xs:complexContent> <xs:extension base="AddData"> <xs:all> <xs:element name="FilePath" type="xs:string" minOccurs="1" /> <xs:element name="ScaleFactorP" type="xs:decimal" minOccurs="1" /> <xs:element name="ScaleFactorQ" type="xs:decimal" minOccurs="1" /> <xs:element name="CalculationMethod" type="xs:integer" minOccurs="1" /> <xs:element name="SlantLookupSize" type="xs:integer" minOccurs="1" /> <xs:element name="TiltLookupSize" type="xs:integer" minOccurs="1" /> </xs:all> </xs:extension > </xs:complexContent> </xs:complexType> 我是 XML 文件: <AdditionalData> <FilePath>files\matrix.xml</FilePath> <ScaleFactorP>1.5</ScaleFactorP> <ScaleFactorQ>1.5</ScaleFactorQ> <CalculationMethod>2</CalculationMethod> <SlantLookupSize>25</SlantLookupSize> <TiltLookupSize>72</TiltLookupSize> </AdditionalData> 但我收到一个错误: 我不知道问题出在哪里,有人可以帮我解决这个错误吗?谢谢! 我尝试做抽象=“假”,这不起作用,因为基本元素是空的...... 我不确定你想在这里实现什么目标。 您的类型替代规则是说,如果 @Type 是“Woodham”,那么该元素应该具有类型 AddDataWoodham;如果 Type 属性不存在或具有任何其他值(您的示例就是这种情况),则该元素应具有类型 AddData;但元素不能具有类型 AddData,因为该类型是抽象的。所以这显然是一个错误。 您的实例似乎符合类型 AddDataWoodham,但未针对该类型进行验证,因为它没有值为 Type 的 Woodham 属性。

回答 1 投票 0

从变量(如此处字符串)生成 xml 模式

最终,我想知道是否可以根据此处字符串变量(而不是已经存在的 .xsd 文件)中包含的架构来验证 Xml 文件。 我找到了几个例子...

回答 1 投票 0

XML XSD 验证 - 国家和州

我是 XML XSD 验证的新手。我正在尝试验证 XML 中的县作为枚举列表以及每个国家/地区的州。 我有这个简单的 XML: 我是 XML XSD 验证的新手。我正在尝试验证 XML 中的县作为枚举列表以及每个国家/地区的州。 我有这个简单的 XML: <?xml version="1.0" encoding="UTF-8"?> <mylist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="test.xsd"> <myrow> <country>Country 1</country> <state>State 11</state> </myrow> <myrow> <country>Country 2</country> <state>State 22</state> </myrow> <myrow> <country>Country 3</country> <state>State 33</state> </myrow> </mylist> 我正在尝试验证 XSD 中所示的国家和每个国家/地区的州... <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" vc:minVersion="1.1"> <xs:element name="mylist"> <xs:complexType> <xs:sequence> <xs:element name="myrow" maxOccurs="unbounded" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element name="country" type="country_type" /> <xs:element name="state" > <xs:alternative test="$country eq 'Country 1'" type="country_1_states_type"/> <xs:alternative test="$country eq 'Country 2'" type="country_2_states_type"/> <xs:alternative test="$country eq 'Country 3'" type="country_3_states_type"/> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <!-- LookUp Lists --> <xs:simpleType name="country_type"> <xs:restriction base="xs:string"> <xs:enumeration value="Country 1"/> <xs:enumeration value="Country 2"/> <xs:enumeration value="Country 3"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="country_1_states_type"> <xs:restriction base="xs:string"> <xs:enumeration value="State 11"/> <xs:enumeration value="State 12"/> <xs:enumeration value="State 13"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="country_2_states_type"> <xs:restriction base="xs:string"> <xs:enumeration value="State 21"/> <xs:enumeration value="State 22"/> <xs:enumeration value="State 23"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="country_3_states_type"> <xs:restriction base="xs:string"> <xs:enumeration value="State 31"/> <xs:enumeration value="State 32"/> <xs:enumeration value="State 33"/> </xs:restriction> </xs:simpleType> </xs:schema> 验证器抛出了这个错误: A Problem Was Found Starting At: Alternative. 有人可以帮忙吗? 我认为该错误消息可能意味着您的 XSD 处理器仅支持 XSD 1.0 而不是 XSD 1.1(这是 xs:alternative 所必需的)。 但是,您的架构无论如何都无法工作。 xs:alternative 只能访问元素的属性,而不能访问子元素(也不能访问带有 $ 符号的变量,这看起来就像您在进行随机猜测)。 这更多的是 XSD 1.1 断言的用例: test="(Country='A' and State='B') or (Country='X' and State='Y') or ..."

回答 1 投票 0

有没有办法在使用MathMl 2.0的同时在XSD中关联MathMl 3.0版本?

我是一名软件工程师,目前正在开发一个项目,该项目将根据我拥有的 xsd 验证带有 MathML 标记的 xml 文件的有效性。 MathML 2.0 版本包含在该 x...

回答 1 投票 0

如何使用 Java 11 和具有导入功能的 XSD 来验证 XML 文件?

我有一个带有 Spring Boot 2.7 的 Java 11 应用程序。我需要使用 XSD 文件验证 XML 文件。这些 XSD 文件包含诸如 、a...

回答 1 投票 0

针对 XSD 验证包含命名空间的 XML 时出现问题

我正在尝试针对 XSD 验证 XML。 XML 在根元素中包含命名空间声明: xmlns="http://www.sample.com/itemfile" 目前,当我正在验证时,我...

回答 0 投票 0

如何使用 schemaLocation 或 noNamespaceSchemaLocation 将 XML 链接到 XSD?

我找到了一些解决这个问题的技巧,但仍然没有帮助我。 这是我的 XML 我找到了一些解决这个问题的技巧,但仍然没有帮助我。 这是我的 XML <?xml version="1.0" encoding="UTF-8"?> <work xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.w3.org/2001/XMLSchema-instance" tns:schemaLocation="myXSDSchema.xsd"> <tns:Objects> <tns:Object Name=":" Location=":"> </tns:Object> </tns:Objects> </work> 这是我的 XSD 文件: <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns = "http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> (some checks) </schema> 我的 XSD 文件位于与 XML 相同的文件夹中。 如何链接这两个文件? How to link an XSD to an XML document depends on the XML document is using namespaces or not... 没有命名空间 使用 xsi:noNamespaceSchemaLocation 提供有关要使用的 XSD 的提示: XML <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="example.xsd"> <!-- ... --> </root> XSD <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="root"> <!-- ... --> </xsd:element> </xsd:schema> With 命名空间 使用 xsi:schemaLocation 提供有关要使用的 XSD 的提示: XML <ns:root xmlns:ns="http://example.com/ns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://example.com/ns example-ns.xsd"> <!-- ... --> </ns:root> XSD <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.com/ns"> <xsd:element name="root"> <!-- ... --> </xsd:element> </xsd:schema>

回答 1 投票 0

Powershell 中的 XML 解析器并在验证后移动文件

以下脚本已经运行良好。我可以根据 xsd 文件验证给定的 xml 文件并记录所有验证错误。 我的问题是,如果没有验证错误,我想移动 xml 文件

回答 0 投票 0

How to Create XML from XSD where Schema is in multiple XSD

我需要从 XSD 文件创建 XML 文件。但它的架构存在于多个 XSD 中。我已经尝试使用 ECLIPSE IDE 进行 tp 创建。请帮我摆脱这个.. 为 CREATEE_ABC_REQ 两个生成 XML ...

回答 0 投票 0

在 Powershell 中解析 XML 并获取所有 xsd 验证错误

我的目标是在 powershell 5.1 中针对 xsd 架构文件验证 xml。到目前为止,我得到了以下代码。实际上它有效并告诉我错误。但问题是,只有第一个验证...

回答 1 投票 0

XML 未针对定义了密钥和 keyref 的 XSD 进行验证

获取 XML 文件以针对 XSD 进行验证时遇到问题。 我正在使用 Visual Studio 2022 编辑和测试 XML 和 XSD。 尝试验证工作负载中的包是

回答 1 投票 0

XML Schema枚举大量可能的值集。

我想做一个枚举元素,它应该包含世界上所有可能的地区(本地,全国,国际)(或者作为一个开始,加拿大应该是好的),我一直在寻找一种方法来 ...

回答 1 投票 0

回答 1 投票 0

在一个XSD复杂元素中可以有多个指标吗?

我想建立一个新的模式来验证XML,以适应我的工作。但我很难回答这个问题:我能否也如何创建一个复杂的元素,其中有一些元素需要 ...

回答 1 投票 0

XSD 错误:cvc-complex-type.2.4.a: 发现以元素开头的内容无效

我有一个XML文件,需要与XSD文件一起验证。但当我想用XSD文件Cvc-complex-type.2.4.a来验证我的XML时,我得到了这个错误。Invalid Content Was Found Starting With ....

回答 2 投票 0

XSD 错误:cvc-complex-type.2.4.a: 发现以元素开头的内容无效

我有一个XML文件,需要用XSD文件来验证,但是当我想用XSD文件Cvc-complex-type.2.4.a来验证我的XML时,我得到了这个错误。Invalid Content Was Found Starting With ...

回答 2 投票 1

XSD指定一个表(所有元素)应该被完全填满或完全不填?

我正在寻找一个解决方案,在XML 1.0的约束条件下,在XSD模式中指定一个表应该被完全填满或根本不填。该表是可选的,只有当...

回答 1 投票 1

© www.soinside.com 2019 - 2024. All rights reserved.