当前位置: 首页 > 知识库问答 >
问题:

节点列表的PHP SimpleXML@attributes行为

司寇阳朔
2023-03-14

这个问题我已经见过好几次了,我想要一个明确的答案。

在xml中给出这个结构:

<ByteListSet>
    <Byte Order="0">14</Byte>
</ByteListSet>

我无法访问属性“order”。var_dump(毫不奇怪)没有显示ByteListSet的任何属性。实际上,foreach迭代不会生成@attributes项。

但是,以下结构:

<ByteListSet>
    <Byte Order="0"><Value>3729</Value></Byte>
</ByteListSet>

结果是ByteListSet中有一个子字节,该子字节是具有@attributes的SimpleXmlObject。

我假设SimpleXML确实从第一个案例中获得了@属性,但是它把它们保存在哪里呢?问题是在前一个结构中,ByteListSet在以下var_dump上生成这个-

object(SimpleXMLElement)[25]
  public 'Byte' => string '14' (length=2)

如果我在其上获取了_object_vars(),并对每个对象进行了var_dump,我只会得到:

string '14' (length=2)

指示字节不是作为xml对象返回给我,而是作为字符串返回给我;作为其上方ByteList对象的属性。

订单="0"在某个地方,但我无法访问它。我怎么去拿?注:-

(我们不控制此架构,因此无法对其进行重组。)

共有1个答案

夏侯林
2023-03-14

你写道:

在xml中给出这个结构:

<ByteListSet>
    <Byte Order="0">14</Byte>
</ByteListSet>

我无法访问属性订单。

当然可以,因为属性order不存在。XML区分大小写,属性名为Order,开头大写O

使用正确的属性名称可以让您在SimpleXML扩展的基本示例中以示例#5中的大纲形式访问值,您可以在手册中找到:

$ByteListSet = simplexml_load_string(<<<XML
<ByteListSet>
    <Byte Order="0">14</Byte>
</ByteListSet>
XML
);

echo $ByteListSet->Byte['Order']; # 0

请记住,你在var_dumpprint_r中看到的并不总是你得到的。Simplexml尤其如此(比较:如何获取xml元素的值?; SimpleXML和print_r()-为什么是空的?),但是,对于PHP中使用ArrayAccess__toString()IteratorIterator/IteratorAggregate的其他对象也是如此。

如果这能回答你的问题,请告诉我。到目前为止,您还没有非常具体地了解哪些现有解决方案,所以我回答了您的问题,但如果我一针见血的话,我不是100%。

 类似资料:
  • 上面的数组 id=311的父节点是 id=31,id=2的父节点为null; 请问应该怎么解决?

  • 问题内容: 我当时正在编写一个简短的脚本来更改元素的内部文本,但是发现它没有方法。我知道那不是继承自,但似乎不是一种有用的方法吗?是否有一个具体的实施问题,我不知道阻止添加的到? 注意:我知道Dojo和jQuery 的节点列表都有某种形式。由于限制,我无法使用任何一个。 问题答案: 现在,NodeList在所有主要浏览器中都具有forEach() 原始答案 这些答案都不能解释 为什么 NodeLi

  • 我有一个预先存在的对象类,它有一个很好的MAY属性。我已经创建了新属性,但我只需要将它们添加到预存在的类中。现在我可以使用iManager(eDirecory的NetIQ接口)将属性添加到类中,但我想知道我是否可以简单地将属性附加到“MAY”部分的对象类,而无需首先删除整个对象类并重新添加它与原始的MAY属性。我注意到很多人都问过这个问题,但我从来没有看到一个回答说你可以做到这一点以及如何做到,或

  • 我正在学习Hadoop。 我在单节点上运行Hadoop。 据我所知,Reducer在Mapper完成后运行(这也是有道理的)。 但是当我在200MB文件上运行MapReduce作业时,Reducer在Mapper完成之前就启动了。我没有使用任何组合器。 谁能解释一下为什么?

  • 问题内容: 这是我所拥有的: 如何编写代码以在列表末尾添加节点? 所以如果我有 我怎么去 其实…我什至不确定是否要添加到最后。我认为添加然后排序是有效的吗?不确定。 谢谢! 问题答案:

  • 我正在编写一段C代码来执行有向图的广度优先遍历。 在main函数中,我总共定义了7个节点,并在它们之间建立了连接。一个节点是包含名称、值和所有子节点列表的结构。 我调用函数breadthFirstTraverse(constNode 我的主要问题是,深层节点的列表似乎为空,即使子节点已添加到其中。 节点: 节点: 遍历函数: 这是输出。您可以看到,node2和node3没有子节点,即使节点被添加到