2013-05-23 2 views
1

PHP를 사용하여 .xsd 파일을 배열로 변환해야합니다. 사용자 측면에서 동적 xsd가 있고 PHP에서 배열을 생성하는 PHP 코드가 필요합니다..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> 
+0

이 이해가되지 않습니다보십시오. 배열 대신에 유형을 의미 했습니까? PHP에도 유형이 있습니까? – leppie

+0

네가 http://stackoverflow.com/questions/2263771/generate-php-classes-from-xsd – Robert

+0

을 확인했는데 유용하지는 않습니다. – Parvez1487

답변

0

트릭을 수행합니다.

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

오류가 발생했습니다. 제 질문에 xsd 파일을 공유했습니다. – Parvez1487

+0

무엇이 오류입니까? –

+0

오류는 "비 객체의 속성을 가져 오려고합니다."입니다. – Parvez1487

0

홉이 도움 당신은

<?php 
    $attributes = array(); 
    $xsdstring = "/htdocs/api/xsd/common.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); 
?> 
+0

나와 똑같은 내용을 게시하고 있습니까? –

+0

오류가 발생했습니다. 제 질문과 함께 xsd 파일을 공유 할 때마다이 코드를 변경할 수 있습니까? – Parvez1487

+0

이 행 수정 ------------ '$ xsdstring = "yourfilename.xsd"; ' ' $ attributeNodes = $ xsdpath-> query ('// xs : element [@name = "shiporder"] ') -> item (0); ' – webGautam

0

function xml2multiarray($xml){ 
    $xml_parser = xml_parser_create(); 
    xml_parse_into_struct($xml_parser, $xml, $xmlarray); 
    $opened = array(); 
    $array = array(); 
    $arrsize = sizeof($xmlarray); 
    for($j=0;$j<$arrsize;$j++){ 
     $val = $xmlarray[$j]; 
     switch($val["type"]){ 
      case "open": 
       $opened[$val["tag"]] = $array; 
       unset($array); 
       break; 
      case "complete": 
       $array[$val["tag"]][] = $val["value"]; 
      break; 
      case "close": 
       $closed = $opened[$val["tag"]]; 
       $closed[$val["tag"]] = $array; 
       $array = $closed; 
      break; 
     } 
    } 
    return $array; 
} 
관련 문제