为什么 python lxml etree xpath return 不止一个元素?

Why does python lxml etree xpath return more than one element?

我在 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 元素,我做错了什么?

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

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

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