Xsd 用一个模式文件处理两个XML文件
对于我的XSD问题,我有一个简短的问题。 我已经创建了一个test.xsd文件,它应该如何处理2种XML类型。 一个用于我的数据库,另一个用于第三方应用程序 无论我是否使用数据库XML文件,它都非常有效,但在第三方软件中,XML标记位于另一个位置。让我解释一下: 数据库XML摘要:Xsd 用一个模式文件处理两个XML文件,xsd,Xsd,对于我的XSD问题,我有一个简短的问题。 我已经创建了一个test.xsd文件,它应该如何处理2种XML类型。 一个用于我的数据库,另一个用于第三方应用程序 无论我是否使用数据库XML文件,它都非常有效,但在第三方软件中,XML标记位于另一个位置。让我解释一下: 数据库XML摘要: <tempData> 123456 </tempData> <DataSet> 505 </DataSet> 123456 505 第三方软件xml摘要: <
<tempData> 123456 </tempData>
<DataSet> 505 </DataSet>
123456
505
第三方软件xml摘要:
<DataSet> 505 </DataSet>
<tempData> 123456 </tempData>
505
123456
XSD摘要:
<xs:complexType>
<xs:sequence>
<xs:element name="Data" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element ref="tempData" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="DataSet" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="tempData" />
<xs:element ref="DataSet" />
</xs:choice>
</xs:complexType>
</xs:element>
当我想用我的XSD文件验证这两个不同的XML文件时,对于数据库XML文件,它是有效的,对于带有反转标记的第三方XML文件,它不会验证
如何处理这两种不同的安排?正如Martin所提到的,这是一个XML模式问题,而不是XSLT。 您需要
xs:all
元素,因此类似于:
<xs:all>
<xs:element ref="tempData" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="DataSet" minOccurs="0" maxOccurs="unbounded" />
</xs:all>
您真的希望两个元素都是可选的吗?下面的解决方案将允许“数据集”和“tempData”同时出现在“数据”元素中(以任何顺序),或者一个或另一个单独出现,或者两者都不出现(空的“数据”元素) 如果要强制其中一个出现,请将minOccurs更改为“1”。 使用“xs:all”时,“Data”元素中的每个元素不能超过一个,最小值为0或1
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Data">
<xs:complexType>
<xs:all>
<xs:element name="tempData" minOccurs="0" />
<xs:element name="DataSet" minOccurs="0" />
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
尝试以下方法:
<Data>
<DataSet> 505 </DataSet>
<tempData> 123456 </tempData>
</Data>
<Data>
<tempData> 123456 </tempData>
<DataSet> 505 </DataSet>
</Data>
<Data>
<DataSet> 505 </DataSet>
</Data>
<Data>
<tempData> 123456 </tempData>
</Data>
<Data>
</Data>
505
123456
123456
505
505
123456
您的XML将是有效的验证是使用XML模式而不是XSLT完成的。您的“XSLT摘要”是一个模式的片段,而不是XSLT。因为minOccurs和maxOccurs=“unbounded”
maxOccurs=“unbounded”
在xs:all
中是不允许的,只有0或1(XSD 1.0)。您能告诉我为什么在接受后的两个月内不接受它吗?如果你让我知道原因,也许我可以帮你解决这个问题。很抱歉这是个错误