1

この XML があるとします。

<?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";
    }

しかし、これは type と 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>.
4

1 に答える 1

1

リクエストした XML の一部にアクセスする方法の例を示す PHP コードを次に示します。

<?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 のように見えますが、実際には形式が正しくないため、実際には望んでいないと思います。
  • の文字エンコードの問題が残っている可能性がありàます?
于 2013-10-18T03:32:59.797 に答える