我正在尝试迭代我已经给出的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
我怎样才能让孩子们接受?
答案 0 :(得分:1)
您可能会发现使用已编译模式的表示更容易,例如Saxon的SCM格式(这是一个XML词汇表,但比原始XSD更容易处理,因为它是单个文件,所有默认值都被扩展等)。
从SCM文件到您想要的输出进行XSLT转换非常简单。
使用低级过程编码而不是像XSLT或XQuery这样的语言,让自己的生活变得更加困难。