php - 在 PHP 中使用命名空间访问 XML 节点的属性

标签 php xml simplexml xml-namespaces

我有这样的东西:

$x = simplexml_load_file('myxml.xml');

[...]

foreach($x->y->z[0]->w->k as $k){
    [...]
}

我的 XML 文件是这样的:

<x>
  <y>
    <z>
      <w>
        <k prefix:name="value">
          [...]
        </k>
      </w>
      [...]
    </z>
    [...]
  </y>
  [...]
</x>

现在,我想访问我的 k 元素的属性。我有红色,我可以在我的 foreach 中使用它来访问它:

$k['prefix:name']

但它不起作用。我做错了什么?

我向我的 k 元素添加了一个假属性并且它起作用了,我认为问题是我试图访问的属性位于不同的命名空间中:

<k xsi:type="value">
[...]
</k>

最佳答案

我解决了,我在 http://bytes.com/topic/php/answers/798486-simplexml-how-get-attributes-namespace-xml-vs-preg_ 找到了解决方案

foreach($x->y->z[0]->w->k as $k){                 
  $namespaces = $k->getNameSpaces(true);                 
  $xsi = $k->attributes($namespaces['xsi']);

  echo $xsi['type']; 
}

getNameSpaces(true) 函数返回 XML 文档的命名空间,然后我选择我正在寻找的那个 (xsi) 并访问我需要的属性就像属性是命名空间的,而不是 $k 节点的。我希望这可以帮助其他人。

关于php - 在 PHP 中使用命名空间访问 XML 节点的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16964535/

相关文章:

php - 检查数据库中的重复项并运行函数

xml - 从 WSDL 文件确定端点

php - PHP通过查询显示xml中的数据

php - PHP 的 SimpleXMLElement::children() 到底返回什么?

php - 如何在 PHP 中删除双引号之间的逗号

php - 从 MySQL 填充 PHP 中的两个选择标签并取消第一个标签中选择的条目

php - 如何将此 XML 数据导入到 MySQL 数据库表中?

c++ - 使用 COLLADA DOM 将 COLLADA 文档输出为字符串

php - 即使RSS工作正常,simplexml_load_file($ feedURL)返回bool(false)

php - 使用php在twitter上分享图片