代码之家  ›  专栏  ›  技术社区  ›  efritz

PHP XML验证

  •  2
  • efritz  · 技术社区  · 14 年前

    针对多个XSD文件验证XML文件(或其一部分)的最佳方法是什么?

    例如,对于配置加载程序,我有以下模式:

    <xsd:schema xmlns="http://www.kauriproject.org/schema/configuration"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.kauriproject.org/schema/configuration"
        elementFormDefault="qualified">
    
        <xsd:element name="configuration" type="configuration" />
    
        <xsd:complexType name="configuration">
            <xsd:choice maxOccurs="unbounded">
                <xsd:element name="import" type="import" minOccurs="0" maxOccurs="unbounded" />
                <xsd:element name="section" type="section" />
            </xsd:choice>
        </xsd:complexType>
    
        <xsd:complexType name="section">
            <xsd:sequence>
                <xsd:any minOccurs="0" maxOccurs="unbounded" processContents="lax" />
            </xsd:sequence>
    
            <xsd:attribute name="name" type="xsd:string" use="required" />
            <xsd:attribute name="type" type="xsd:string" use="required" />
        </xsd:complexType>
    
        <xsd:complexType name="import" mixed="true">
            <xsd:attribute name="resource" type="xsd:string" />
       </xsd:complexType>
    </xsd:schema>
    

    由于配置类现在存在,它允许添加 <section> 使用定义具体的解析器类(很像ASP.NET中的自定义配置部分)标记。但是,我不确定如何验证正在解析的部分。

    是否可以使用XSD文件/字符串验证这段代码,而不将其写回文件?

    2 回复  |  直到 14 年前
        1
  •  0
  •   Kevin Wiskia    14 年前

    不要把它看作一个大的XML文件,而应该用块来考虑它。自定义XML部分不是主文件模式的一部分,它只是数据。尝试使用此XSD文件进行验证,然后在加载自定义节时使用另一个XSD文件验证该XML。

        2
  •  0
  •   Community kfsone    7 年前

    我正在解决同一个问题,我只是简单地合并了文件(在我的案例中,这是可能的,因为这是一个非常简单的问题)。

    链接: Is it possible to validate XML against multiple schemas in PHP?