Как искать специальные/экранирующие символы в XPATH 1.0

Я работаю с инструментом просмотра кода с открытым исходным кодом под названием SonarQube. Это приложение позволяет адаптировать определенные ограничения программирования к тому, как вы хотите, чтобы эти правила применялись и проверялись на предмет неудачи или соответствия.

Я работаю над обзором кода для форматирования и ищу ошибки/ошибки/уязвимости в путях XML. У меня возникают проблемы с поиском специальных символов в этих путях

Например, это выражение XPATH 1.0 работает при поиске «http» в атрибуте местоположения.

//definitions/service/port/address[contains(@location,'http')]

Это выражение вернет значение true, поскольку оно находит http. Однако,

//definitions/service/port/address[contains(@location,'http:')]

Это выражение не возвращает true, потому что я считаю, что символ : вызывает неверную интерпретацию.

Ниже приведен пример кода, на котором я провожу свои тесты. Есть ли какая-то работа для этого или специальные символы, которые можно использовать в такой ситуации?

<definitions>
    <service >
       <port>
          <address location="http://example.com"/>
        </port>
     </service>
</definitions>

person Nickadiemus    schedule 10.07.2018    source источник


Ответы (1)


В символе : в строковом литерале XPath нет ничего особенного.

Оба выражения XPath вернут элемент address, показанный в вашем XML-документе. Если SonarQube ведет себя иначе, чем это (возможно, но маловероятно), то проблема может заключаться в SonarQube.

Возможно, вы непреднамеренно сократили важные аспекты реальной проблемы, пытаясь обеспечить минимальный MCVE.

person kjhughes    schedule 10.07.2018
comment
Я так и думал, но это просто не сработало. Все еще новичок в изучении XPATH. Это вполне может быть проблемой с SonarQube, поэтому мне нужно будет разобраться в этом. Отметит это как ответ. Если найду решение, отвечу здесь. Спасибо @kjughes - person Nickadiemus; 10.07.2018