XPathEvalError: Незарегистрированная функция для match () в lxml

я пытаюсь использовать следующий запрос xpath в Python

from lxml.html.soupparser import fromstring
root = fromstring(inString)
nodes = root.xpath(".//p3[matches(.,'ABC')]//preceding::p2//p3")

но это дает мне ошибку

  nodes = root.xpath(".//p3[matches(.,'ABC')]//preceding::p2//p3")
  File "lxml.etree.pyx", line 1507, in lxml.etree._Element.xpath (src\lxml\lxml.etree.c:52198)
  File "xpath.pxi", line 307, in lxml.etree.XPathElementEvaluator.__call__ (src\lxml\lxml.etree.c:152124)
  File "xpath.pxi", line 227, in lxml.etree._XPathEvaluatorBase._handle_result (src\lxml\lxml.etree.c:151097)
  File "xpath.pxi", line 212, in lxml.etree._XPathEvaluatorBase._raise_eval_error (src\lxml\lxml.etree.c:150896)
  lxml.etree.XPathEvalError: Unregistered function

Как я могу использовать функции XPath 2.0 здесь с lxml?

осветление

Я использовал функцию содержимого ранее, как

nodes = root.xpath(".//p3[contains(text(),'ABC')]//preceding::p2//p3")

проблема в том, что в моем xml есть новые строки и пробелы в тексте, поэтому я попытался использовать что-то вроде

nodes = root.xpath(".//p3[contains(normalize-space(),'ABC')]//preceding::p2//p3")

но это не имеет никакого эффекта. Наконец, я попытался использовать функцию соответствия, и я получил ошибку.

Образец XML

<doc>

<q></q>

<p1>
    <p2 dd="ert" ji="pp">

        <p3>1</p3>
        <p3>2</p3>
        <p3>
               ABC
        </p3>
        <p3>3</p3>

     </p2>

     <p2 dd="ert" ji="pp">

        <p3>4</p3>
        <p3>5</p3>
        <p3>ABC</p3>
        <p3>6</p3>

     </p2>

</p1>
<r></r>
<p1>
    <p2 dd="ert" ji="pp">

        <p3>7</p3>
        <p3>8</p3>
        <p3>ABC
        </p3>
        <p3>9</p3>

     </p2>

     <p2 dd="ert" ji="pp">

        <p3>10</p3>
        <p3>11</p3>
        <p3>ABC</p3>
        <p3>12</p3>

     </p2>

</p1>
</doc>

Ответы на вопрос(2)

Ваш ответ на вопрос