【问题标题】:Why does python lxml etree xpath return more than one element?为什么 python lxml etree xpath 返回多个元素?
【发布时间】:2020-08-30 18:06:59
【问题描述】:

我在 python3 中使用 lxml etree

我的 xpath 表达式是这样的,并且能够在我的 xhtml 中找到我正在寻找的元素。

root = tree.getroot()
map = {'epub': 'http://www.idpf.org/2007/ops', 'm': "http://www.w3.org/1998/Math/MathML"}
mathML_elements = tree.xpath(".//m:math", namespaces=map)

解析后的xhtml示例如下:

</td><td><m:math xmlns:m="http://www.w3.org/1998/Math/MathML" alttext="-500"><m:mrow><m:mo>-</m:mo><m:mn>500</m:mn></m:mrow></m:math></td><td>0</td></tr><tr><td>8</td><td>Betalt renter på lånet</td><td>413</td><td></td><td>+</td><td><m:math xmlns:m="http://www.w3.org/1998/Math/MathML" alttext="-413"><m:mrow><m:mo>-</m:mo><m:mn>413</m:mn></m:mrow></m:math></td><td>=</td><td><m:math xmlns:m="http://www.w3.org/1998/Math/MathML" alttext="-413"><m:mrow><m:mo>-</m:mo><m:mn>413</m:mn></m:mrow></m:math></td><td>+</td><td></td><td>0</td></tr><tr><td>9</td><td>Avskrivning av pc og inventar</td><td>300</td><td><m:math xmlns:m="http://www.w3.org/1998/Math/MathML" alttext="-300"><m:mrow><m:mo>-</m:mo><m:mn>300</m:mn></m:mrow></m:math></td><td>+</td><td></td><td>=</td><td><m:math xmlns:m="http://www.w3.org/1998/Math/MathML" alttext="-300"><m:mrow><m:mo>-</m:mo><m:mn>300</m:mn></m:mrow></m:math></td><td>+</td><td></td><td>0</td></tr><tr><td>10</td><td>Uttak eier privat</td><td><m:math xmlns:m="http://www.w3.org/1998/Math/MathML" alttext="-14 000"><m:mrow><m:mo>-</m:mo><m:mn>14 000</m:mn></m:mrow></m:math></td><td></td><td>+</td><td><m:math xmlns:m="http://www.w3.org/1998/Math/MathML" alttext="-14 000"><m:mrow><m:mo>-</m:mo><m:mn>14 000</m:mn></m:mrow></m:math></td><td></td><td><m:math xmlns:m="http://www.w3.org/1998/Math/MathML" alttext="-14 000"><m:mrow><m:mo>-</m:mo><m:mn>14 000</m:mn></m:mrow></m:math></td><td>+</td><td></td><td>0</td></tr><tr><td></td><td>Balansekontoer</td><td></td><td>29 700</td><td>+</td><td>122 680</td><td>=</td><td>103 080</td><td>+</td><td>49 500</td><td>0</td></tr><tr><td></td><td>Balansesum</td><td></td><td></td><td></td><td>152 080</td><td>=</td><td>152 080</td><td></td><td></td><td>0</td></tr></tbody></table>
<p>Vi ser at Trine Dals egenkapital har økt med <m:math xmlns:m="http://www.w3.org/1998/Math/MathML" alttext="kr 1037 (kr 103080 - 102043)"><m:mrow><m:mi>kr </m:mi><m:mn>1 037</m:mn><m:mo>⁡</m:mo><m:mfenced><m:mrow><m:mi>kr </m:mi><m:mn>103 080</m:mn><m:mo>-</m:mo><m:mn>102 043</m:mn></m:mrow></m:mfenced></m:mrow></m:math>. Det betyr at det egentlige resultatet av driften denne måneden må være <m:math xmlns:m="http://www.w3.org/1998/Math/MathML" alttext="kr 1037 + kr 14000 = kr 15037"><m:mrow><m:mi>kr </m:mi><m:mn>1 037</m:mn><m:mo>+</m:mo><m:mi>kr </m:mi><m:mn>14 000</m:mn><m:mo>=</m:mo><m:mi>kr </m:mi><m:mn>15 037</m:mn></m:mrow></m:math>. Vi viser for øvrig til resultatregnskapet i neste avsnitt.</p>
<p>✐ <strong>Oppgave 1-1 og 1-2, side 229.</strong></p>

我的问题是某些元素的末尾还包含额外的文本,如下面的 xpath 中返回的节点之一所示:

<m:math xmlns:m="http://www.w3.org/1998/Math/MathML" alttext="kr 1037 + kr 14000 = kr 15037"><m:mrow><m:mi>kr </m:mi><m:mn>1 037</m:mn><m:mo>+</m:mo><m:mi>kr </m:mi><m:mn>14 000</m:mn><m:mo>=</m:mo><m:mi>kr </m:mi><m:mn>15 037</m:mn></m:mrow></m:math>. Vi viser for øvrig til resultatregnskapet i neste avsnitt.

我只想要 m:math 元素,我做错了什么?

【问题讨论】:

    标签: python xml xpath lxml mathml


    【解决方案1】:

    额外的文本是_Element 的.tail 属性。

    如何处理尾部取决于你想对元素做什么。

    例如,如果您使用tostring() 序列化元素,则可以指定with_tail=False 以在序列化中不包含尾部。

    【讨论】:

    • 这个答案是正确的,并且解决了我的问题。我仍然不明白为什么将文本添加到元素中,但我能够解决它。谢谢
    猜你喜欢
    • 2012-03-23
    • 1970-01-01
    • 2017-03-21
    • 2014-03-13
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    相关资源
    最近更新 更多