首页
学习
活动
专区
圈层
工具
发布

Xform解析
EN

Stack Overflow用户
提问于 2014-03-14 06:08:52
回答 2查看 494关注 0票数 1

在xform中,我希望解析xml并访问节点的id。它是xform,我想访问节点test_geopoint (id=test_geopoint)的id。但是每个xform的节点名称都会改变。

代码语言:javascript
复制
    <?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>.之后访问节点的id

代码语言:javascript
复制
$movies = new SimpleXMLElement($xmlstr);
echo $movies->model->instance->children()[0]['id'];
and
echo $movies->head->title->model->instance->children()[0]['id'];

如何在php中检索<instance>旁边节点的id?

EN

回答 2

Stack Overflow用户

发布于 2014-03-14 07:31:38

下面的示例与您预期的相同,使用它的方式与我在数组中访问的name相同。你应该被称为instanceId

代码语言:javascript
复制
$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&#211;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";
                }
            }
        }
    }
}
?>
票数 1
EN

Stack Overflow用户

发布于 2014-03-14 19:20:37

默认名称空间是http://www.w3.org/2002/xforms,因此html的每个非前缀元素子代都在该名称空间中;包括实例数据。

尝试向实例数据添加一个空命名空间(xmlns="") .

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22397460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档