假设我有这个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>.
答案 0 :(得分: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,但实际上是畸形的。à
可能会出现字符编码问题
通过?
。