【问题标题】:iterate through xsd xml file遍历 xsd xml 文件
【发布时间】: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 子元素。

标签: php xml xsd xmlreader


【解决方案1】:

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

从 SCM 文件到所需输出的 ​​XSLT 转换非常简单。

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

【讨论】:

  • 撒克逊人的东西看起来是基于java的,而我所做的一切都不是java。这对我来说是一个全新的世界,所以你说得有点过头了,但我要读一下这些东西。我很欣赏这个方向。
  • 您可以通过简单的命令行调用生成 SCM 文件,并且可以使用 XSLT 转换生成的文件,因此您实际上不需要编写任何 Java,尽管您确实需要 Java已安装。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-12
相关资源
最近更新 更多