Исключить элемент с дочерним элементом, содержащий текст - PullRequest
0 голосов
/ 20 сентября 2019

Рассмотрим этот XML:

<filters>
    <filter>
        <field>
            <name>empId</name>
            <type>int</type>
        </field>
        <op>in</op>
        <value>eID</value>
        <valueType>PERI</valueType>
    </filter>
    <filter>
        <field>
            <name>desc</name>
            <type>string</type>
        </field>
        <op>in</op>
        <value>dbDesc</value>
        <valueType>PERI</valueType>
    </filter>
</filters>

Я хочу сохранить все дерево, за исключением <field>, которое содержит name = 'empId'.

Результат должен быть:

<filters>
    <filter>
        <field>
            <name>desc</name>
            <type>string</type>
        </field>
        <op>in</op>
        <value>dbDesc</value>
        <valueType>PERI</valueType>
    </filter>
</filters>

XPath 1.0, пожалуйста.

Очевидные вещи вроде /*[not(//field/name[text()='empId'])] не работают.

1 Ответ

0 голосов
/ 20 сентября 2019

Использовать ниже Xpath:

Обновлен Xpath:

//field//*[not(contains(.,'empId'))]

Выше xpath будет выбрано все, что ожидается имя - emp

ИЛИ

//filter//field[not(contains(.,'empId'))]/*

Выше xpath выберет все поля, ожидайте, что поле имеет emp

................................... ...................................

Старый Xpath

//field[not(contains(.,'empId'))]

ИЛИ

/*//filter[field[not(contains(.,'empId'))]]

ИЛИ

/*//filters//filter[field[not(contains(.,'empId'))]]

Выбирает поле, имя которого не имеет, как empId

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...