Сравнение атрибутов, дающее ложные совпадения и несоответствия в tinyxpath

0

Я использую tinyxpath-1.3.1. C/C++ в Linux. Когда я делаю поиск по xpath в документе, я не нахожу узлы, когда думаю, что должен.

Мой XML:

<data>
  <event deviceId="25479545.5" interface="sensor-multilevel" 
         command="state" label="luminance" newValue="800" 
         oldValue="9" time="1412227484" />
</data>

Мое выражение xpath:

/data/event[@deviceId="25479545.5" and @interface="sensor-multilevel" and   
            @label="luminance" and @newValue&gt;600 and @oldValue&lt;10]

Если я беру oldValue и использую () как это, то сравнение работает:

/data/event[(@deviceId="25479545.5" and @interface="sensor-multilevel") and
            (@label="luminance" and @newValue&gt;600)]

Существует ли ограничение на количество сравнений?

Что-нибудь особенное с преобразованием 600 в десятичный?

Нужно ли мне "" значение 600, похоже, работает в любом случае.

Любые идеи о том, как заставить его работать с атрибутом oldValue, включенным в выражение?

TinyXPath:

TiXmlNode * node = TinyXPath::XNp_xpath_node( root, expression.c_str() );

Спасибо Ларри

  • 0
    Что произойдет, если вы просто oldValue и не oldValue использовать скобки?
  • 0
    Если я опускаю oldValue и не использую парнетез, он не совпадает.
Показать ещё 4 комментария
Теги:

2 ответа

0
Лучший ответ

Похоже, в библиотеке tinyxpath есть некоторые ошибки....

Это работает для tinyxpath-1.3.1:

    /data/event[((@deviceId="25479545.5" and @interface="sensor-multilevel") and
          (@label="luminance" and @newValue&gt;"600")) and (@oldValue&lt;"10")]

чтобы скопировать их в окончательный набор из 2.

Или я просто конвертирую в libxml2.

0

Кажется, вы получаете сравнение строк здесь, а не числовое сравнение ("9"> "10" в алфавитном порядке). Это неверно в соответствии со спецификациями (как XPath 1.0, так и 2.0, хотя они встречаются по-разному).

Самый безопасный подход, вероятно, заключается в том, чтобы явно преобразовать число: write

number(@oldValue) &lt; 10
  • 0
    Это вероятно верно, если моя библиотека, которую я использовал, действительно работала. Но это дает мне ошибку выполнения, когда я пытаюсь использовать числовую функцию. У меня такое ощущение, что библиотека, которую я использую, не поддерживает ее.
  • 0
    Извините, я сейчас посмотрел на tinyxpath, и кажется, что это не совсем xpath, а лишь часть их собственного изобретения. Поэтому пометить это как вопрос XPath было ошибкой.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню