0

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

Posted by 撒得一地 on 2016年5月23日 in PHP笔记
国外稳定加速器推荐    Express | Vypr

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); 
?>

上一篇:

下一篇:

相关推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注

4 + 5 = ?

网站地图|XML地图

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