我正在尝试访问以下XML文档的Text节点中的所有文本:
<Section>
<Subsection lims:inforce-start-date="2003-07-01" lims:fid="182941" lims:id="182941">
<Label>(2)</Label>
<Text>
In subsection (1),
<DefinedTermEn>beer</DefinedTermEn>
and
<DefinedTermEn>malt liquor</DefinedTermEn>
have the meaning assigned by section 4.
</Text>
</Subsection>
</Section>
在Xpath中,使用$xml->xpath("Body/Section/Subsection")
将返回以下内容:
object(SimpleXMLElement)#7 (3) {
["Label"]=>
string(3) "(2)"
["Text"]=>
string(64) "In subsection (1), and have the meaning assigned by section 4."
使内淋巴结消失。有没有一种方法可以将一个节点中所有子节点的所有内容“展平”,这样我就可以得到一段连续的文本?例如In subsection (1), beer and malt liquor have the meaning assigned by section 4.
2条答案
按热度按时间ni65a41a1#
混合节点对于SimpleXML来说太复杂了-使用DOM。
DOMNode::$textContent
属性将返回任何节点的文本内容。对于元素节点,这包括任何后代节点的文本内容。DOMXpath::evaluate()
也支持返回标量值的表达式。如果将节点列表转换为字符串,它将返回列表中第一个节点的文本内容。输出:
n6lpvg4x2#
@ThW发布的答案解释了DOM如何更适合于此,但是这种方法可能会给您留下空白问题。您可能需要考虑编写一个函数来递归Text元素中的节点树,并构建一个字符串来修剪每个文本节点中的空格,只留下一行。
输出: