使用 - > children通过名称空间项解析SimpleXML

时间:2017-03-26 03:15:23

标签: php xml xml-parsing namespaces attributes

我正在解析以下XML文件:

testxml.xml

public void bind(Product product){
        mBinding.getViewModel().setProduct(product);
        mBinding.executePendingBindings();
    }

我只对少数几个属性感兴趣,即我可以通过下面的代码获得的节点ID,数据键。但是,当我进入y:命名空间时,我什么都没得到。

xmlparser.php

<?xml version="1.0" encoding="UTF-8" standalone="no"?><document>
<node id="n0">
  <data key="d6">
    <y:GenericNode configuration="TEXT I WANT TO GET">
      <y:Geometry height="56.030557066666574" width="181.68810666666667" x="638.4599149206349" y="143.24969103333325"/>
      <y:Fill color="#FFCC66" color2="#FF9900" transparent="false"/>
      <y:BorderStyle color="#000000" type="line" width="1.0"/>
      <y:NodeLabel alignment="center" autoSizePolicy="node_width" configuration="CroppingLabel" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="34.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="181.68810666666667" x="0.0" y="10.882466033333287">Text I want to Get<y:LabelModel>
          <y:SmartNodeLabelModel distance="4.0"/>
        </y:LabelModel>
        <y:ModelParameter>
          <y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="0.0" nodeRatioX="-0.5" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
        </y:ModelParameter>
      </y:NodeLabel>
    </y:GenericNode>
  </data>
</node>

我已经阅读过类似问题的先前答案,我根据这些答案采用了儿童方法。但是,我无法使其工作,我不知道如何实现其他一些方法,如声明命名空间和xpath方法。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

那是因为y:GenericNode不是根元素的直接子元素,因此您不应该直接从$xml访问它:

$xml->node->data->children('y', true)->GenericNode->attributes()->configuration;

快速测试:https://eval.in/761412