如何通过一个XSD文件验证许多xml文件

时间:2014-07-23 10:02:30

标签: java xml

如何通过一个XSD验证许多XML文件。有一个条件。它们具有不同的根元素名称。我使用java解析XML。我对XSD和DTD了解不多。是否可以将一个XSD文件用于此类XML文件?如何使用这个XSD文件(我对根名称定义感兴趣)?

我发现我可以使用XSD验证XML文件。我的目标是检查许多XML文件。它们的结构看起来像<root>someTextYouWant</root>(问题的简单例子,真正的结构更难)。在每个文件中,根名称将是不同的(abc,sdfjsn,someStringYouWant)。如何定义可以承认根元素具有不同名称的XSD文件。我想使用1个XSD文件来验证具有上述结构的所有XML文件。

3 个答案:

答案 0 :(得分:0)

使用XSD的目的是验证某些XML文档的结构。

例如,XSD中的<xs:element name="root">可以对应于XML中的<root>

同样,<xs:element name="first_child" type="xs:string" />可以对应<first_child>xyz</first_child>。请注意,XSD还在此处指定所包含数据的类型。它可能类似于&#34; xs:int&#34;同样。

如果您正在谈论任何XML元素的内容,XSD显然不需要任何限制,不同的XML文件可以具有不同的内容/值。如果您自己谈论元素,则可以使用minOccurs属性之类的内容来使用可选元素。

如果不查看确切的XML,很难指出正确的方法。

答案 1 :(得分:0)

您可以通过在XML文件中实现所需的xsd文件链接来进行比较,如下所示:

<xsd:schema xmlns:xsd="desired_schema_link">

您可以在要使用xsd

验证的每个XML文件中执行此操作

答案 2 :(得分:0)

您可以尝试这样的schema.xsd

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:complexType name="c1">
        <xs:sequence>
            <xs:element name="c1e1" minOccurs="0" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="rootType" mixed="true">
        <xs:sequence>
            <xs:choice maxOccurs="unbounded">
                <xs:element name="e1" minOccurs="0"/>
                <xs:element name="e2" type="c1" minOccurs="0" />
            </xs:choice>
        </xs:sequence>
    </xs:complexType>


    <xs:element name="sdfjsn" type="rootType" />
    <xs:element name="abc" type="rootType" />

</xs:schema>

这会将abc.xmlabc作为根元素

进行验证
<?xml version="1.0"?>
<abc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="schema.xsd">
    <e1 />
    <e2>
        <c1e1 />
    </e2>
    <e2>
        <c1e1 />
    </e2>
</abc>

sdfjsn.xmlsdfjsn作为根元素

<?xml version="1.0"?>
<sdfjsn xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="schema.xsd">
    <e2> </e2>
    <e1 />
</sdfjsn>