Xform XML разбор
В xform xml я хочу разобрать xml и получить доступ к идентификатору узла. Это xform xml, и я хочу получить доступ к идентификатору узла test_geopoint (id=test_geopoint). Но имя узла будет меняться для каждого xform xml.
<?php
$xmlstr = <<<XML <?xml version="1.0"?>
<h:html xmlns="http://www.w3.org/2002/xforms" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:jr="http://openrosa.org/javarosa" xmlns:orx="http://openrosa.org/xforms/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<h:head>
<h:title>test_geopoint</h:title>
<model>
<instance>
<test_geopoint id="test_geopoint">
<name/>
<geopoint/>
<meta>
<instanceID/>
</meta>
</test_geopoint>
</instance>
</h:body>
</h:html> $XML;
я попытался код, как это, но не получить доступ к идентификатору узла после <instance>.
$movies = new SimpleXMLElement($xmlstr);
echo $movies->model->instance->children()[0]['id'];
and
echo $movies->head->title->model->instance->children()[0]['id'];
Как можно получить идентификатор узла рядом с <instance>
в php?
2 ответа
Приведенный ниже пример совпадает с ожидаемым, используйте его так же, как я name
в массиве. Вы должны упомянуть как instanceId
$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<movies>
<movie>
<title>PHP: Behind the Parser</title>
<characters>
<character>
<name>Ms. Coder</name>
<actor>Onlivia Actora</actor>
</character>
<character>
<name>Mr. Coder</name>
<actor>El ActÓr</actor>
</character>
</characters>
<plot>
So, this language. It's like, a programming language. Or is it a
scripting language? All is revealed in this thrilling horror spoof
of a documentary.
</plot>
<great-lines>
<line>PHP solves all my web problems</line>
</great-lines>
<rating type="thumbs">7</rating>
<rating type="stars">5</rating>
</movie>
</movies>
XML;
$movies = new SimpleXMLElement($xmlstr);
echo '<pre>';
foreach($movies as $moviesdata){
foreach($moviesdata as $moviesdatavalues){
foreach($moviesdatavalues as $mdvk=>$mdn){
foreach($mdn as $c=>$v){
if($c == 'name'){
echo $v."\n";
}
}
}
}
}
?>
Пространство имен по умолчанию http://www.w3.org/2002/xforms
поэтому каждый нефиксированный элемент потомок html
находится в этом пространстве имен; включая ваши данные экземпляра.
Попробуйте добавить пустое пространство имен (xmlns=""
) к вашему экземпляру данных...
<model>
<instance>
<test_geopoint xmlns="" id="test_geopoint">
<name/>
<geopoint/>
<meta>
<instanceID/>
</meta>
</test_geopoint>
</instance>
<bind nodeset="/test_geopoint/name" type="string"/>
<bind nodeset="/test_geopoint/geopoint" type="geopoint"/>
<bind calculate="concat('uuid:', uuid())" nodeset="/test_geopoint/meta/instanceID" readonly="true()" type="string"/>
</model>