Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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 SimpleXML找不到命名空间元素_Php_Xml_Simplexml_Xml Namespaces - Fatal编程技术网

Php SimpleXML找不到命名空间元素

Php SimpleXML找不到命名空间元素,php,xml,simplexml,xml-namespaces,Php,Xml,Simplexml,Xml Namespaces,我似乎无法让PHP的SimpleXML类识别XHTML文档中带有前缀的名称空间元素。下面是我的例子: test.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:zuq="http

我似乎无法让PHP的SimpleXML类识别XHTML文档中带有前缀的名称空间元素。下面是我的例子:

test.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:zuq="http://localhost/zuq">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
    <h1>Heading</h1>
    <p>Paragraph</p>
    <zuq:region name="myRegion">
        <div class="myClass">
            <h1><zuq:data name="myDataHeading" /></h1>
            <p><zuq:data name="myDataParagraph" /></p>
        </div>
    </zuq:region>
</body>
</html>
它返回:

SimpleXMLElement Object
(
    [head] => SimpleXMLElement Object
        (
            [meta] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [http-equiv] => Content-Type
                            [content] => text/html; charset=utf-8
                        )

                )

            [title] => Untitled Document
        )

    [body] => SimpleXMLElement Object
        (
            [h1] => Heading
            [p] => Paragraph
        )

)
但当我做以下事情时:

$sxml = simplexml_load_file('test.html');
print_r($sxml);
$sxml = simplexml_load_file('test.html');
$sxml_zuq = $sxml->children('zuq', true);
print_r($sxml_zuq);
它返回空值:

SimpleXMLElement Object
(
)
使用
foreach
或其他方式遍历对象似乎不起作用,在
children()
中使用URI而不是前缀也会失败

我显然在某个地方犯了一个错误,但我不确定在哪里,因为我的尝试与我在阅读中遇到的许多教程示例完全相同

这里发生了什么?

children()
只提供上下文节点的[直接]子节点,而不是子节点

$html = simplexml_load_file('test.html');

// get <body/>'s children
$html->body->children('zuq', true);

// use XPath to get all zuq:* nodes
$html->xpath('//zuq:*');
$html=simplexml_load_文件('test.html');
//让孩子们
$html->body->children('zuq',true);
//使用XPath获取所有zuq:*节点
$html->xpath('//zuq:');

仅供参考,如果名称空间定义为xmlns:zuq=”http://localhost/zuq“是在实际的xml元素中声明的,而不是在根节点中声明的,那么我们必须另外调用registerXPathNamespace函数,然后使用xpath,如
SimpleXMLElement::getNamespaces()所示
你知道结果了吗?是的,我知道约翰·乔塔;然而,正如乔希所指出的,孩子们只是直系后裔