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 есть единственный корневой элемент.