XPath для поиска текста, разделенного на нескольких потомков - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть OOXML (из файла Word .docx), который выглядит следующим образом:

<w:tr>
    <w:tc>
        <w:p>
            <w:r>
                <w:t>~TABLE_xxx~</w:t>
            </w:r>
        </w:p>
    </w:tc>
</w:tr>
<w:tr>
    <w:tc>
        <w:p>
            <w:r>
                <w:t>~TABLE_</w:t>
            </w:r>
            <w:r w:rsidRPr="00FB4DC5">
                <w:t>xxx</w:t>
            </w:r>
            <w:r>
                <w:t>~</w:t>
            </w:r>
         </w:p>
     </w:tc>
</w:tr>

Я хочу найти все элементы, в которых текст потомков содержит " ~ TABLE_xxx ~ ".

Я пробовал следующее:

//w:tr[descendant::text()[contains(., "~TABLE_xxx~")]]

Однако это соответствует только первому <w:tr> моего документа.Я предполагаю, что поскольку у второго текст разбит на разные <w:r> (слово «бежит» из текста), я не получаю совпадения.

Как это обойти?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Тестирование текстовых узлов - неправильный путь, особенно с OOXML, который часто разбивает строки на w:r прогоны.Вместо этого протестируйте строковые значения .

Этот XPath,

//w:tr[contains(.,"~TABLE_xxx~")]

выберет все w:tr элементы, строковое значение которых содержитцелевая строка.

См. также: Проверка текстовых () узлов и строковых значений в XPath

0 голосов
/ 26 апреля 2018

Поиск по 'xxx' не вариант?

//w:tr[descendant::text()[contains(., "xxx")]]
...