我正在做一个脚本,它获取一个xml文件并在其中显示一些文本
<documento fecha_actualizacion="20221027071750">
<metadatos>
[...]
</metadatos>
<analisis>
[...]
</analisis>
<texto>
<dl>
<dt>1. Poder adjudicador: </dt>
<dd>
[...]
</dd>
</dl>
</texto>
</documento>
我正在尝试将'texto'元素中的html作为字符串('<dl><dt>1. Poder ad[...]</dt></dd>[...]'
(,但当得到它时,它显示为:
Array ( [0] => SimpleXMLElement Object ( [dl] => SimpleXMLElement Object ( [dt] => Array ( [0] => 1. Poder adjudicador: [1] => 2. Tip
按元素(dl、dt、dd等(排序。我已经尝试了所有可能的解决方案来查询"texto"元素(使用"//texto/text(("、innerhtml、node((、nodeValue((等(,但它总是给我相同的结果。
我怎么能得到像'<dl><dt>1. Poder ad[...]</dt></dd>[...]'
这样的东西
谢谢!!
我尝试过选择器:
$texto = $xml->xpath('//texto/text()');
$texto = $xml->xpath('//texto/innerXml()');
$texto = $xml->xpath('//texto/node()');
$texto = $xml->xpath('//texto/nodevalue()');
您需要获取父节点(texto
(,迭代并将每个子节点保存为XML:
$documento = new SimpleXMLElement(getXMLstring());
foreach ($documento->xpath('//texto') as $texto) {
$result = '';
foreach ($texto->children() as $content) {
$result .= $content->asXML();
}
var_dump($result);
}
输出:
string(59) "<dl>
<dt>1. Poder adjudicador: </dt>
<dd>
[...]
</dd>
</dl>"
SimpleXML是一种专注于元素节点的抽象。它有局限性。如果texto
元素可以具有非元素子节点,则它们将不被包括在内。在这种情况下,您需要使用DOM。
$document = new DOMDocument();
$document->loadXML(getXMLString());
$xpath = new DOMXpath($document);
foreach ($xpath->evaluate('//texto') as $texto) {
$result = '';
foreach ($texto->childNodes as $content) {
$result .= $document->saveXML($content);
}
var_dump($result);
}
此外,DOMXpath::evaluate()
支持完整的Xpath 1.0,包括返回标量值的表达式。