2013-10-17 16 views
1

假設我有這樣的XMLXML解析困境,由於命名空間

<?xml version="1.0" encoding="UTF-8"?> 
<TEI xmlns="http://www.tei-c.org/ns/1.0" xmlns:irp="http://kuleuven-kulak.be/itec/ns/irp/" xml:id="irp-rmg-fr-2013-05-03-00862-src" xml:lang="fr"> 
    <text xml:id="irp-rmg-fr-2013-05-03-00862-src." xml:lang="fr"> 
    <body> 
     <div> 
     <p> 
      <irp:PEnrich irp:path="(//section/paragraph)[1]" n="irp-1"> 
      <irp:PNerd> 
       1955 (30 avril) Naissance à 
       <irp:ne ref="http://fr.dbpedia.org/resource/Lille" irp:confidence="1" type="LOC">Lille</irp:ne>. 
      </irp:PNerd> 
      </irp:PEnrich> 
     </p> 
     </div> 
    </body> 
    </text> 
</TEI> 

我應該如何使用的SimpleXML和XPath解析IRP:PNerd節點得到這樣的字符串:

1955 (30 avril) Naissance à <url="http://fr.dbpedia.org/resource/Lille">Lille</url>. 

我試着通過這樣做,把文本:

$penrich = $xml->xpath("//irp:PEnrich"); 
    foreach ($penrich as $p) { 
     $pnerds = $p->children("irp", true); 
     $pnerd = $pnerds->PNerd; 
     $ne = $pnerd->ne; 
     foreach ($ne as $n) { 
      print_r($n->children()); 
     } 
     echo "----\n"; 
    } 

但這隻能檢索類型和REF: (另外,應該怎樣我在代碼中訪問這些值)

SimpleXMLElement Object 
(
    [@attributes] => Array 
     (
      [ref] => http://fr.dbpedia.org/resource/Lille 
      [type] => LOC 
     ) 
) 

但我想獲得的東西,如:?

1955 (30 avril) Naissance à <url="http://fr.dbpedia.org/resource/Lille">Lille</url>. 

回答

1

下面是一些PHP代碼顯示瞭如何訪問XML的各個部分的一些例子你請求:

<?php 

$tei = <<<XML 
<TEI xmlns="http://www.tei-c.org/ns/1.0" 
    xmlns:irp="http://kuleuven-kulak.be/itec/ns/irp/" 
    xml:id="irp-rmg-fr-2013-05-03-00862-src" 
    xml:lang="fr"> 
    <text xml:id="irp-rmg-fr-2013-05-03-00862-src." xml:lang="fr"> 
    <body> 
     <div> 
     <p> 
      <irp:PEnrich irp:path="(//section/paragraph)[1]" n="irp-1"> 
      <irp:PNerd>1955 (30 avril) Naissance à <irp:ne ref="http://fr.dbpedia.org/resource/Lille" irp:confidence="1" type="LOC">Lille</irp:ne>.</irp:PNerd> 
      </irp:PEnrich> 
     </p> 
     </div> 
    </body> 
    </text> 
</TEI> 
XML; 

$doc = new DOMDocument(); 
$doc->loadXML(mb_convert_encoding($tei, 'utf-8', mb_detect_encoding($tei))); 
$xpath = new DOMXPath($doc); 
$xpath->registerNamespace('irp', 'http://kuleuven-kulak.be/itec/ns/irp/'); 

echo $xpath->evaluate("string(//irp:PNerd/text())"); 
echo '<url ref="'. $xpath->evaluate("string(//irp:ne/@ref)") . '">'; 
echo $xpath->evaluate("string(//irp:ne/text())"); 
echo '</url>'; 
?> 

產生以下輸出:

1955 (30 avril) Naissance ? <url ref="http://fr.dbpedia.org/resource/Lille">Lille</url> 

注:

  • 我假設你有一個錯字,並沒有真的想要<url=因爲這是 看起來像XML,但實際上是畸形的。
  • 還有一個字符編碼問題,à即將到來 到?
+0

謝謝。這已經幫助了我很多。我仍然有一個更完整的例子的問題,但我會相應地更新問題。 – profoX

+0

我接受了你的答案,因爲它包含了非常有用的信息來完成項目。謝謝 – profoX