Мне нужно сравнить атрибуты XML, которые представляют целые числа, но могут быть заданы в десятичной или шестнадцатеричной форме (с префиксом 0x) с использованием XPath/XSLT-1.0.XPath 1.0, интерпретировать шестнадцатеричный атрибут как число
Вот (не работает) XSLT, чтобы продемонстрировать:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="iso-8859-1" omit-xml-declaration="yes" />
<xsl:template match="//node">
<xsl:if test="@value > 2">
<xsl:value-of select="@value"/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Вот XML-для ввода:
<?xml version="1.0" encoding="UTF-8"?>
<body>
<node value="1"/>
<node value="3"/>
<node value="0x03"/>
</body>
Здесь требуемый выход. Формат не важен; Важным является только то, что есть совпадение на втором и третьем узлах:
3 0x03
Существует только совпадение на втором узле; шестнадцатеричный узел не интерпретируется как число с помощью XML. Может ли кто-нибудь подумать о разумном решении этой проблемы?
Какой процессор XSLT вы используете? Это невозможно сделать за один шаг в XSLT 1.0. Вам нужно будет создать промежуточный результат (фрагмент результирующего дерева) с [преобразованными числами] (http://stackoverflow.com/questions/22905134/convert-hexa-to-integer-in-xslt) и от *, что * - с помощью функции расширения 'node-set()' вы можете выбрать узлы так, как вы хотите ('// node [@value > 2]'). Поскольку 'node-set()' недоступен везде, все зависит от версии вашего XSLT-процессора. – Tomalak
@Tomalak Почему, по-вашему, необходимо иметь узел? –
Процессор - msxsl. –