我需要通过powershell脚本对xsd验证xml,并提供有关可选属性的警告等。 例如,My xsd:
while
和xml:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="LocalizedValue">
<xs:attribute name="Lang" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>Language Code</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Name" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>District Typr</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="ShortName" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>Аbbreviation</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:complexType name="DistrictType">
<xs:sequence>
<xs:element name="Localizations" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="Localization" type="LocalizedValue" minOccurs="1" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Local attributes</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Branches">
<xs:complexType>
<xs:sequence>
<xs:element name="Branch" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="Code" type="xs:int" use="required">
<xs:annotation>
<xs:documentation>Branch Code</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Code" type="xs:int" use="required">
<xs:annotation>
<xs:documentation>Dictionary code</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="GroupCode" type="xs:int" use="optional">
<xs:annotation>
<xs:documentation>Another Code</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="IsDeleted" type="xs:boolean" use="optional" default="false">
<xs:annotation>
<xs:documentation>
documentation
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:element name="DistrictType" type="DistrictType">
<xs:annotation>
<xs:documentation>documentation</xs:documentation>
</xs:annotation>
</xs:element>
</xs:schema>
我需要得到一些这样的信息:
警告:缺少可选属性“GroupCode”。
我使用powershell脚本验证:
<DistrictType Code="1" IsDeleted="false"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="./../Schema/flowGeoClassifier.DistrictType.xsd">
<Localizations>
<Localization Lang="ru" Name="район" ShortName="р-н" />
</Localizations>
<Branches>
<Branch Code="1" />
</Branches>
<Countries>
<Country Code="1" />
<Country Code="483647" />
<Country Code="2147483647" />
</Countries>
</DistrictType>
ValidationEventHandler是否通过标准方法验证可选属性?
答案 0 :(得分:0)
XmlReader认为缺少的可选属性完全有效,因此不会引发错误(或警告)。
自己获取此类信息的唯一方法是手动检查它们。您可以通过将文档读入XmlDocument然后running XPath查询来相当容易地完成此操作。
答案 1 :(得分:0)
为什么不创建一个必需属性的模式变体,然后对其进行验证?
架构是黑白的,事情要么有效,要么没有:警告的空间不大。但是,您不必一直使用相同的模式,您可以使用具有不同严格级别的模式在不同阶段进行验证。