XML-локатор преобразования соответствует отсутствующему атрибуту

Скажем, у меня есть следующий XML:

<logger>
    <level value="ALL" />
    <appender-ref ref="AsyncAppender" />
</logger>
<logger name="PerformanceMetricsLog">
    <level value="OFF" />
</logger>

Мне нужно сделать XML-преобразование на этом.

Как бы я сделал xdt:Locator соответствовать или первый? А на втором?

Я пытался просто делать xdt:Locator="Match(name)" и я получил ошибку, что не было атрибута "имя". (Я надеялся, что если атрибут не будет там, он просто изящно вернет false для совпадения.)

1 ответ

Решение

XDT-х Match занимает разделенный запятыми список имен атрибутов, так xdt:Locator="Match(name)" ожидает, что там будет атрибут с именем "имя".

Вы можете подумать о XPath, где отсутствие атрибута просто вернет false, и вы можете проверить его отсутствие с помощью not(@name),

XDT имеет XPath функция, которая принимает фактический XPath, чтобы вы могли написать что-то вроде:

xdt:Locator="XPath(//logger[not(@name)])"

выбрать безымянного logger элементы.

Примечание: ваш XML в том виде, в котором он написан, не очень корректный Убедитесь, что в вашем фактическом XML есть единственный корневой элемент.

Другие вопросы по тегам