Nasıl PHP / XPath / DOM ad alanlarına sorgulamak yok

2 Cevap php

Ben ad kullanan bir XML dökümanını sorgulamak için çalışıyorum. Ben ad alanları olmadan xpath ile başarı vardı, ama var ad alanları ile sonuç yok. Bu ben çalışıyordum ne temel bir örnektir. Ben hafifçe yoğunlaşmış, bu yüzden benim gerçek sorunu bozabilecek Benim örnek küçük sorunlar olabilir.

Örnek XML:

<?xml version="1.0"?>
<sf:page>
     <sf:section>
          <sf:layout>
              <sf:p>My Content</sf:p>
          </sf:layout>
     </sf:section>
</sf:page>

Örnek PHP Kodu:

<?php
$path = "index.xml";

$content = file_get_contents($path);

$dom = new DOMDocument($content);

$xpath = new DOMXPath($dom);
$xpath->registerNamespace('sf', "http://developer.apple.com/namespaces/sf");

$p = $xpath->query("//sf:p", $dom);

Benim sonuç "p" a "DOMNodeList Object ()" dir ve uzunluğu 0 olmasıdır. Herhangi bir yardım mutluluk duyacağız.

2 Cevap

DOMDocument constructor does not take the contents, but version and encoding. Instead of:

$path = "index.xml";
$content = file_get_contents($path);
$dom = new DOMDocument($content);

Bu deneyin:

$path = "index.xml";
$doc = new DOMDocument();
$doc->load($path);

Sen xml dosyasında ad alanını tanımlamak gerekir:

<?xml version="1.0"?>
<root xmlns:sf="http://developer.apple.com/namespaces/sf">
    <sf:page>
         <sf:section>
              <sf:layout>
                  <sf:p>My Content</sf:p>
              </sf:layout>
         </sf:section>
    </sf:page>
</root>