📅  最后修改于: 2023-12-03 14:45:14.345000             🧑  作者: Mango
在PHP中,使用DOMDocument来操作XML文档是常见的操作之一。在DOMDocument对象中,DOMElement是最常用的节点类型之一,它表示XML文档中的元素节点,即标签。
在DOMElement对象中,getElementsByTagName()函数是常用的函数,它可以获取当前节点下指定名称的所有子节点。而getElementsByTagNameNS()函数则是一个更加高级的函数,它可以获取指定名称空间下指定名称的所有子节点。
getElementsByTagNameNS(string $namespaceURI,string $localName):DOMNodeList|false;
返回值:如果获取成功则返回一个DOMNodeList对象,否则返回false。
下面的XML代码用来演示getElementsByTagNameNS()函数的示例:
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:ns1="http://ns1" xmlns:ns2="http://ns2">
<ns1:tag1>Text 1</ns1:tag1>
<ns1:tag2>Text 2</ns1:tag2>
<ns2:tag1>Text 3</ns2:tag1>
<ns2:tag2>Text 4</ns2:tag2>
</root>
在上面的XML中,有两个名称空间:ns1和ns2。在ns1和ns2下各有两个元素节点。现在假设我们已经将这个XML文档载入到DOMDocument对象中,而当前操作的元素节点是根节点root。下面的PHP代码演示了如何使用getElementsByTagNameNS()函数来获取所有ns1下的节点:
$ns1Elements = $root->getElementsByTagNameNS('http://ns1', '*');
foreach ($ns1Elements as $el) {
echo $el->localName . ' = ' . $el->nodeValue . "\n";
}
输出结果为:
tag1 = Text 1
tag2 = Text 2
在上面的示例中,getElementsByTagNameNS()函数根据指定的名称空间 URI 和标签名称,获取到了两个元素节点。我们通过遍历DOMNodeList对象中的所有子节点来输出所有节点的名称和值。
getElementsByTagNameNS()是一个很实用的函数,它可以帮助我们在XML文档中更加方便的获取指定名称和名称空间的元素节点。但需要注意的是,它仅仅能获取到直接子节点,如果想要获取更深层次的子节点,需要使用更高级的遍历方式,比如XPath。