在 PHP 中将 .xsd 文件转换为数组

Posted by 撒得一地 on 2016年5月23日 in PHP笔记

PHP 没有直接的函数,像转 XML 文件一样,将 .xsd(XML Schema Definition) 文件转换成相关数组。所以第一步你需要将 .xsd 文件转换为 xml,然后最后成关联数组解析 xml 文件。下面是几个简单的步骤,将.xsd 文件转换成关联数组。下面先使用 PHP 自带的DOMDocument 操作文档,如果你的 PHP 没有开启 DOM 扩展,你要先去安装相应的扩展,然后在 php.ini 配置文件中启动扩展才能使用 DOMDocument 类。

步骤1:加载 .xsd 文件

<?php 
//创建文档实例
$doc = new DOMDocument(); 

$doc->preserveWhiteSpace = true;

$doc->load('yourfile.xsd');
?> 

步骤2:将 .xsd 文件保存为一个 xml 文件

<?php
$doc->save('myxml.xml');
?>

步骤3:将 xml 内容保存为字符串并删除 xsd 前缀。

<?php
$myxmlfile = file_get_contents('myxml.xml');
$parseObj = str_replace($doc->lastChild->prefix.':',"",$myxmlfile);
?>

最后 将 .xsd 文件转换到 xml 文件中,现在我们使用 PHP 的 simplexml_load_string  函数获取数组。

<?php
$xml_string= simplexml_load_string($parseObj);

$json = json_encode($ob);

$data = json_decode($json, true);

print_r($data);
?>

备注:在 stackoverflow 上看到有人提问,摘抄了回答者的代码,仅供参考:

提问者:我需要使用 PHP 将.xsd 文件转换成 数组。我要从用户端动态的获取 xsd 文件,然后用 PHP 对这些内容生成数组。

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="shiporder">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="orderperson" type="xs:string"/>
      <xs:element name="shipto">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="name" type="xs:string"/>
            <xs:element name="address" type="xs:string"/>
            <xs:element name="city" type="xs:string"/>
            <xs:element name="country" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="item" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="title" type="xs:string"/>
            <xs:element name="note" type="xs:string" minOccurs="0"/>
            <xs:element name="quantity" type="xs:positiveInteger"/>
            <xs:element name="price" type="xs:decimal"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="orderid" type="xs:string" use="required"/>
  </xs:complexType>
</xs:element>

</xs:schema>

回答者1:

<?php 
$attributes = array(); 

$xsdstring = "yourfile.xsd"; 
$XSDDOC = new DOMDocument(); 
$XSDDOC->preserveWhiteSpace = false; 

if ($XSDDOC->load($xsdstring)) 
{ 
    $xsdpath = new DOMXPath($XSDDOC); 
    $attributeNodes = 
              $xsdpath-> 
              query('//xs:simpleType[@name="attributeType"]') 
              ->item(0); 

    foreach ($attributeNodes->childNodes as $attr) 
    { 
        $attributes[ $attr->getAttribute('value') ] = $attr->getAttribute('name'); 
    } 
    unset($xsdpath); 
} 
print_r($attributes); 
?>

上一篇:

下一篇:

相关推荐

网站地图|XML地图

Copyright © 2015-2024 技术拉近你我! All rights reserved.
闽ICP备15015576号-1 版权所有©psz.