Синтаксический анализ XML-атрибута вызывает ошибку без вывода сообщений. - PullRequest
0 голосов
/ 20 марта 2012

Может ли кто-нибудь объяснить мне, почему $ 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>";
}

Ответы [ 2 ]

0 голосов
/ 20 марта 2012

Вам необходимо объявить свое пространство имен с помощью registerXPathNamespace ()

Этот вопрос должен указывать в правильном направлении: PHP simplexml: почему перестает работать xpath?

0 голосов
/ 20 марта 2012

Ваша самая большая проблема, вероятно, связана с тем, что она не является правильно сформированной XML-строкой. Оба элемента simpxmlelement и 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;
...