Php 解析XML属性会导致无提示错误

Php 解析XML属性会导致无提示错误,php,simplexml,Php,Simplexml,有人能给我解释一下为什么$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无法解析,而$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=“测试”;
$xml3=“测试”;
$root=新的simplexmlement($xml2);
//echo$xml;
foreach($root->xpath('//multistatus')作为$node){
echo$node。“
”; }
好的,这是请求修改的最新副本,但似乎仍然不起作用:

$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>";
}
$xml2=“测试”;
$xml3=“测试”;
$root=新的simplexmlement($xml2);
$root->registerXPathNamespace(“n”,“urn:ietf:params:xml:ns:caldav”);
//echo$xml;
foreach($root->xpath('//n:multistatus')作为$node){
echo$node。“
”; }
您最大的问题可能来自于它不是一个格式良好的XML字符串。SimpleXmlElement和simplexml_load_字符串都需要格式良好的XML字符串。尝试添加普通的XML头,看看这是否有帮助

$xml = <<<XML
<?xml version="1.0">
<root>
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">Test</multistatus>
</root>
XML;

$xml=您需要使用registerXPathNamespace()声明名称空间


这个问题应该指向正确的方向:

$xml2=“Test”$xml3=“测试”//$xml->registerXPathNamespace(“n”,”;$root=new simplexmlement($xml2);//echo$xml;foreach($root->xpath('//multistatus')as$node){echo$node.
“;}应该结合我们的两个答案mathieu和我的。应该这样做。你需要一些基本容器来处理这些多状态,除非你只计划在它下面有一个节点。确实。我只是想让基本的工作。我已经结合了这两个,但它似乎仍然不想工作。我会说它是因为你在声明您的名称空间错误。您需要使用“C”(注意它的大写字母)而不是“n”。我不确定“n”是从哪里来的。此外,默认名称空间需要注册,只需分配一个随机字母,如果您愿意,您可以在这里使用“n”。我不想麻烦您,但如果您能帮我解决这个问题,我将非常感激:$xml2=“Test”$xml3=”Test“$root=new-simplexmlement($xml2);$root->registerxpathnespace(“C”,“urn:ietf:params:xml:ns:caldav”);//echo$xml;echo'Test';foreach($root->xpath('//C:multistatus')as$node){echo'Test';echo$xml2=“Test”;$xml3=“Test”;$root=new-simplexmlexml($xml2);$root->-registerxpathnespace(“n”urn:ietf:params:xml:ns:caldav“;//echo$xml;foreach($root->xpath('//n:multistatus')作为$node){echo$node.
“;}假设我正确声明了名称空间,它似乎没有任何效果。