这个问题的目的是作为参考来回答一个特别常见的问题,这可能会采取不同的形式:参考 - 如何在SimpleXML中处理命名空间(带有冒号的标签和属性)?
- 我有一个包含多个名称空间的XML文档;我如何使用SimpleXML解析它?
- 我的XML在标签名称中有一个冒号(“:”),如何使用SimpleXML访问它?
- 如何访问我的XML文件中的属性时,他们的名称中有冒号?
如果您的问题已被重复关闭,可能与这些示例不同,但此页面应告诉您需要了解的内容。
下面是一个说明性示例:
$xml = '
<?xml version="1.0" encoding="utf-8"?>
<document xmlns="http://example.com" xmlns:ns2="https://namespaces.example.org/two" xmlns:seq="urn:example:sequences">
<list type="short">
<ns2:item seq:position="1">A thing</ns2:item>
<ns2:item seq:position="2">Another thing</ns2:item>
</list>
</document>
';
$sx = simplexml_load_string($xml);
此代码将不起作用;为什么不?
foreach ($sx->list->ns2:item as $item) {
echo 'Position: ' . $item['seq:position'] . "\n";
echo 'Item: ' . (string)$item . "\n";
}
的第一个问题是,->ns2:item
是无效的语法;但它改变这种无法正常工作或:
foreach ($sx->list->{'ns2:item'} as $item) { ... }
为什么不和你应该怎么使用呢?
相关元讨论:https://meta.stackoverflow.com/questions/351420/canonical-question-for-using-php-simplexml-with-namespaces – IMSoP