有人可以向我解释为什么$ xml2无法解析,但$ xml3有效吗?我没有逃避xml字符串中的内容吗?
$xml2 = "<multistatus xmlns=\"DAV:\" xmlns:C=\"urn:ietf:params:xml:ns:caldav\">Test</multistatus>";
$xml3 = "<multistatus>Test</multistatus>";
$root = new SimpleXMLElement($xml2);
//echo $xml;
foreach ($root->xpath('//multistatus') as $node) {
echo $node . "<BR>";
}
好的,这是包含所请求修改的最新副本,但似乎仍无效:
$xml2 = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><multistatus xmlns=\"DAV:\" xmlns:C=\"urn:ietf:params:xml:ns:caldav\">Test</multistatus>";
$xml3 = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><multistatus>Test</multistatus>";
$root = new SimpleXMLElement($xml2);
$root->registerXPathNamespace("n", "urn:ietf:params:xml:ns:caldav");
//echo $xml;
foreach ($root->xpath('//n:multistatus') as $node) {
echo $node . "<BR>";
}
答案 0 :(得分:0)
你最大的问题可能来自于这不是一个格式良好的XML字符串。 simplxmlelement和simplexml_load_string都需要格式良好的XML字符串。尝试添加普通的XML标头,看看是否有帮助。
$xml = <<<XML
<?xml version="1.0">
<root>
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">Test</multistatus>
</root>
XML;
答案 1 :(得分:0)
您需要使用registerXPathNamespace()
声明您的命名空间这个问题应指向正确的方向:PHP simplexml: why does xpath stop working?