2014-02-12 2 views
0

Я пытаюсь выполнить итерацию через файл xsd, который мне дал.итерация через xsd xml файл

У этого есть сотни этих элементов сложного типа, и я пытаюсь выполнить итерацию по каждому из них и заканчивая массивом, как показано ниже.

<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

В вашем фрагменте кода вы только читаете xs: complexType и получаете доступ к атрибуту name. Вам также нужно получить дочерние элементы xs: sequence. – SenseException

ответ

1

Возможно, вам будет легче работать с представлением скомпилированной схемы, такой как формат SCM Saxon (который является XML-лексикой, но гораздо проще обрабатывать, чем необработанный XSD, поскольку это один файл, все значения по умолчанию расширен и т.д.).

Выполнение преобразования XSLT из файла SCM на ваш желаемый результат будет очень простым.

Вы делаете жизнь намного сложнее для себя, используя низкоуровневое процедурное кодирование, а не язык XSLT или XQuery.

+0

Материал Saxon выглядит как Java, и я ничего не делаю в java. Для меня это совершенно новый мир, поэтому вы немного поговорили над моей головой, но я буду читать это. Я ценю направление. – bart2puck

+0

Вы можете сгенерировать SCM-файл с помощью простого вызова командной строки, и вы можете преобразовать полученный файл в XSLT, поэтому вам не нужно писать какую-либо Java, хотя вам нужно установить Java. –

Смежные вопросы