我有一个HTML树,我在根上使用'string()'
查询来获取节点中的所有文本。
但是,我想在每个节点之间添加一个空格。
即。
string()
上的 '<root><div>abc</div><div>def</div></root>'
将
'abcdef'
string()
上的 '<root><div>abc</div><div>def</div></root>'
应该
'abc def '
答案 0 :(得分:1)
您可以尝试使用itertext()
方法迭代所有文字内容:
from lxml import etree
root = etree.XML('<root><div>abc</div><div>def</div></root>')
print(' '.join(e for e in root.itertext()))
它产生:
abc def
答案 1 :(得分:1)
当XML比显示的更复杂或涉及混合内容时,不清楚您想要的输出。在XSLT 1.0中,你将不得不进行树的递归下降,涉及类似
的内容<xsl:template match="div">
<xsl:if test="not(position()=1)"> </xsl:if>
<xsl:value-of select="."/>
</xsl:template>
答案 2 :(得分:1)
'<root><div>abc</div><div>def</div></root>'
应该成为'abc def '
在XSLT 1.0中,这将完成:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="/root">
<xsl:for-each select="div">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
或者您可能想要检索所有文本节点,而不管文档结构如何。这可以通过以下方式完成:
<xsl:template match="/">
<xsl:for-each select="//text()">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>