【问题标题】:PHP: DOMDocument - attributes with a colon in it?PHP:DOMDocument - 带有冒号的属性?
【发布时间】:2011-09-11 18:17:32
【问题描述】:

我正在使用 DOMDocument 来解析 XML (SVG)。

某些节点的属性中带有冒号,例如:

<svg 
   id="svg2"
   width="1000"
   height="1000"
   sodipodi:version="0.32"
   inkscape:version="0.48.1 "
   ...
>

但是当我这样做时:

$node= DOMDocument->documentElement;
foreach($node->childNodes as $key=>$childnode) {
  foreach($childnode->attributes as $attribute) {
    echo $attribute->name."\n";
  }
}

带有 : 的属性在没有第一部分(命名空间)的情况下打印

在像这样迭代属性时如何获取该属性的命名空间?

【问题讨论】:

    标签: php attributes svg domdocument colon


    【解决方案1】:

    当您使用DOMDocument 时,您需要明确使用命名空间(冒号表示的内容)。

    看看这个方法:http://www.php.net/manual/en/domelement.getattributenodens.php

    【讨论】:

    • 我现在看到实际上属性已打印,但没有命名空间......所以我改变了我的问题......
    【解决方案2】:

    来自 OP 评论的答案,nodeName 来自 DOMNode

    $node= DOMDocument->documentElement;
    foreach($node->childNodes as $key=>$childnode) {
      foreach($childnode->attributes as $attribute) {
        echo $attribute->nodeName."\n";
      }
    }
    

    原答案:

    prefix 来自DOMNode 怎么样?

    $node= DOMDocument->documentElement;
    foreach($node->childNodes as $key=>$childnode) {
      foreach($childnode->attributes as $attribute) {
        echo $attribute->prefix.":".$attribute->name."\n";
      }
    }
    

    【讨论】:

    • 谢谢,已经找到 $attribute 变量 (DOMNode) 的其他属性。我现在使用 $attribute->nodeName ,它返回整个属性名称,无论它是否具有命名空间......
    • 太棒了!用您的存档结果更新答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 2015-07-08
    • 2012-01-19
    • 2012-03-26
    • 1970-01-01
    • 2017-04-17
    相关资源
    最近更新 更多