Xpath Приведение узла к номеру для мода - PullRequest
4 голосов
/ 29 декабря 2011

У меня есть узлы, которые содержат числа, которые я хотел бы привести к числу и использовать мод. Например:

<item>
    <num>1</num>
</item>
<item>
    <num>2</num>
</item>
<item>
    <num>3</num>
</item>

Я пробовал:

num mod 3 -- returns NaN
number(num) mod 3 -- returns NaN
number(string(num)) -- returns NaN

Есть идеи, можно ли это сделать? Даже если бы был способ конвертировать в ASCII, я бы взял это

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 29 декабря 2011

number(num) mod 3 должно работать. В следующих файлах примеров выводится 1 2 0 как положено.

XML

(сохранено как input.xml)

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="mod_test.xsl"?>
<items>
    <item>
        <num>1</num>
    </item>
    <item>
        <num>2</num>
    </item>
    <item>
        <num>3</num>
    </item>
</items>

1011 * XSL * (сохранено как mod_text.xsl) <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="xsl"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:template match="//item"> <xsl:value-of select="number(num) mod 3"/> </xsl:template> </xsl:stylesheet> Примечание: просто num mod 3 в выборе также работает. Для справки: соответствующий раздел в документации.

1 голос
/ 29 декабря 2011

Я пробовал:

num mod 3 -- returns NaN 
number(num) mod 3 -- returns NaN 
number(string(num)) -- returns NaN 

Есть идеи, можно ли это сделать?

Поскольку полный XML-документ не предоставлен, вот мои два предположения :

  1. Узел контекста для относительных выражений не имеет num children . Решение состоит в том, чтобы убедиться, что контекстный узел является правильным, или использовать абсолютные выражения XPath.

  2. Не показанный документ XML находится в пространстве имен по умолчанию . В этом случае решение состоит в том, чтобы «зарегистрировать пространство имен» (связать префикс строки с пространством имен по умолчанию, скажем, "x"), а затем заменить в выражении (ях) num на x:num.

...