[英]How to list all namespace from XML using php Xpath
<?xml version="1.0" encoding="US-ASCII" ?>
<main:docs xmlns:admin="someval" xmlns:system="someval" xmlns:links="someval">
XML content here
</main:docs>
我想列出XML中使用的命名空間,即xmlns:admin,xmlns:system,xmlns:links。
我嘗試過
$doc = new DOMDocument();
$context = $doc->documentElement;
$xpath = new DOMXPath($doc);
$xml = simplexml_load_file("path to xml");
foreach( $xpath->query('namespace::*', $context) as $node )
{
echo $node->nodeName;
}
但沒有輸出
簡短的答案是,您不會。 最重要的xmlns:admin
不是名稱空間,而只是別名/前綴。 實際的名稱空間是您用someval
替換的值。
SimpleXMLElement::getNamespaces()
(根據您的評論)是僅用於調試的方法。 您不應該從文檔中讀取名稱空間前綴,它們只會對當前上下文有效。
$xml = <<<'XML'
<foo:outer xmlns:foo="urn:foo">
<bar:inner xmlns:bar="urn:bar"/>
</foo:outer>
XML;
$outer = new SimpleXMLElement($xml);
var_dump(
$outer->getNamespaces()
);
var_dump(
$outer->children('urn:bar')->inner->getNamespaces()
);
輸出:
array(1) {
["foo"]=>
string(7) "urn:foo"
}
array(1) {
["bar"]=>
string(7) "urn:bar"
}
在任何元素節點上都可以使用命名空間定義,您可以為元素定義默認的命名空間。
因此,您可以使用實際的名稱空間URI。 將它們放入代碼中的變量/數組中。 使用SimpleXMLElement::registerXpathNamespace()
為名稱空間注冊您自己的前綴(對於Xpath表達式)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.