迭代xsd xml文件

时间:2014-02-12 22:14:17

标签: php xml xsd xmlreader

我正在尝试迭代我已经给出的xsd文件。

它有数百个这些复杂类型的元素,我试图遍历每个元素并最终得到一个数组,如下所示。

 <xs:complexType name="UserAccessDeviceFileGetListRequest">
<xs:complexContent>
  <xs:extension base="core:OCIRequest">
    <xs:sequence>
      <xs:element name="userId" type="UserId"/>
      <xs:element name="accessDevice" type="AccessDevice"/>
    </xs:sequence>
  </xs:extension>
</xs:complexContent>

<xs:complexType name="UserAccessDeviceFileModifyRequest">
<xs:complexContent>
  <xs:extension base="core:OCIRequest">
    <xs:sequence>
      <xs:element name="userId" type="UserId"/>
      <xs:element name="accessDevice" type="AccessDevice"/>
      <xs:element name="fileFormat" type="DeviceManagementFileFormat"/>
      <xs:element name="uploadFile" type="FileResource"/>
    </xs:sequence>
  </xs:extension>
</xs:complexContent>

 Array
 (
     [UserAccessDeviceFileGetListRequest] => Array
                                              ( [0] => "userId"
                                                [1] => "accessDevice"
                                              )
     [UserAccessDeviceFileModifyRequest] = > Array
                                              ( [0] => "userId"
                                                [1] => "accessDevice"
                                                [2] => "fileFormat"
                                                [3] => "uploadFile"
                                              )
    )

我尝试过使用xmlreader,我可以获得complexType的名称,但是无法更深入地获取元素名称......

  $xsdstring = "file.xsd";
 $t = new XMLREADER();
 $t->open($xsdstring);

 while($t->read())
 {
     if ($t->name === "xs:complexType")
            {
                    echo "-->" . $t->getAttribute('name') . "\n";
            }
 }

包含所有complexType名称属性列表的结果...

-->UserAccessDeviceFileGetListRequest
-->UserAccessDeviceFileModifyRequest

我怎样才能让孩子们接受?

1 个答案:

答案 0 :(得分:1)

您可能会发现使用已编译模式的表示更容易,例如Saxon的SCM格式(这是一个XML词汇表,但比原始XSD更容易处理,因为它是单个文件,所有默认值都被扩展等)。

从SCM文件到您想要的输出进行XSLT转换非常简单。

使用低级过程编码而不是像XSLT或XQuery这样的语言,让自己的生活变得更加困难。