在xpath中选择注释的所有兄弟(包括文本)

时间:2014-01-10 17:33:36

标签: python xml xpath

我有一个XML文档,其片段行可能如下所示:

<p>Some text <!--a comment --> some more text <b>some bold text</b> something else etc</p>

我想根据其文字选择评论,但也包括以下所有&#34; sibling&#34;元素。在这个例子中,我知道我可以用&#39; // comment()[来获得评论。 =&#34;评论&#34;]&#39;。

我如何得到结果:&#34;更多文字一些粗体文字其他等等&#34;? (段落标签内的其余兄弟姐妹)

如果它有任何区别,我使用python和etree进行解析。

编辑:

我的测试XML完整:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<p>A paragraph<!--A comment--><b>test</b>A line break</p>
</root>

我的测试XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
    <xsl:template match="/">
        <xsl:copy-of select='//comment()/following-sibling::node()'/>
    </xsl:template>
</xsl:stylesheet>

结果:

<?xml version="1.0" encoding="UTF-8"?>

或者,在Python中,使用lxml,只需一个&#34;无&#34;对象

编辑#2:

我很糟糕 - 接受的答案很有效!

1 个答案:

答案 0 :(得分:1)

如果你想得到所有兄弟姐妹,包括其他评论:

//comment()[.="a comment "]/following-sibling::node()

例如:

>>> xml.xpath('//comment()[.="a comment "]/following-sibling::node()')
[' some more text ', <Element b at 0x2923af0>, ' ', <!-- other comment -->, ' something else etc']

我添加了其他评论,但以其他方式使用了您的输入数据。