Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用php Xpath从XML中列出所有名称空间_Php_Xpath - Fatal编程技术网

如何使用php Xpath从XML中列出所有名称空间

如何使用php Xpath从XML中列出所有名称空间,php,xpath,Php,Xpath,但是没有输出简而言之,你没有。最重要的xmlns:admin不是名称空间,而是别名/前缀。实际名称空间是用someval替换的值 SimpleXMLElement::getNamespaces()(来自您的注释)是一种仅用于调试的方法。您不应该从文档中读取名称空间前缀,它们只对当前上下文有效 $doc = new DOMDocument(); $context = $doc->documentElement; $xpath = new DOMXPath($doc); $xml = s

但是没有输出

简而言之,你没有。最重要的
xmlns:admin
不是名称空间,而是别名/前缀。实际名称空间是用
someval
替换的值

SimpleXMLElement::getNamespaces()
(来自您的注释)是一种仅用于调试的方法。您不应该从文档中读取名称空间前缀,它们只对当前上下文有效

$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;
}
任何元素节点上都允许使用名称空间定义,您可以为元素定义默认名称空间


因此,您可以使用实际的名称空间URI。将它们放入代码的变量/数组中。使用
SimpleXMLElement::registerXpathNamespace()
为命名空间(Xpath表达式)注册您自己的前缀

简单的回答是,你没有。最重要的
xmlns:admin
不是名称空间,而是别名/前缀。实际名称空间是用
someval
替换的值

SimpleXMLElement::getNamespaces()
(来自您的注释)是一种仅用于调试的方法。您不应该从文档中读取名称空间前缀,它们只对当前上下文有效

$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;
}
任何元素节点上都允许使用名称空间定义,您可以为元素定义默认名称空间


因此,您可以使用实际的名称空间URI。将它们放入代码的变量/数组中。使用
SimpleXMLElement::registerXpathNamespace()
为命名空间(Xpath表达式)注册您自己的前缀

也只有节点名或值?只声明名称空间的名称,如xmlns:system,xmlns:adminI在此处获得解决方案也只有节点名或值?只声明名称空间的名称,如xmlns:system,xmlns:adminI在此处获得解决方案
$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"
}