【发布时间】:2014-03-11 13:08:19
【问题描述】:
我正在尝试遍历给定的 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
我怎样才能得到孩子呢?
【问题讨论】:
-
在您的代码 sn-p 中,您只读取 xs:complexType 并访问 name 属性。您还需要获取 xs:sequence 子元素。