2014-02-04 2 views
1

Я бегу в немного рассола, где я работаю из сетевых масок в стенографии (то есть. 255.255.255.0 = /24)маска сети обсчитывать в XSL

Я сделал целый букет прибегая к помощи, и удачливый достаточно, никто никогда не спрашивал, как вычислить это в XSL.

Так что я пришел с моим собственным решением, теперь голый со мной, но я думал, что ... почему бы не сделать целую кучу заявлений, как:

<xsl:choose> 
    <xsl:when test="'255.255.255.0'"> 
     <xsl:value-of select="'/24'"/> 
    </xsl:when> 
    <xsl:when test="'255.255.0.0'"> 
     <xsl:value-of select="'/16'"/> 
    </xsl:when> 
    ... 

и так далее и так далее. Тогда я понял. Думаю, я слишком много думал о коробке. Должно быть решение для расчета этого. Слишком много возможностей сетевой маски. Кто-нибудь знает, как вычислить его?

плачет под столом

ответ

1

Теоретически это возможно, но его, вероятно, будет требовать чрезвычайно многословный код, особенно в XSLT1.0.

Network masks rely heavily on bitwise logic, which this answer covers in XSLT. Но не только это, вам нужно будет сначала маркировать строку, which isn't easy/short in XSLT 1.0.

Затем вам нужно проверить, что каждый октет является правильным (то есть последовательным 1, а затем последовательным 0 s).

В целом, он может быть короче кода, чтобы перечислить 31 случай, и где-то проверять те, что находятся в его собственном маленьком шаблоне. Возможно, даже вычислительно быстрее, так как токенизация строк будет рекурсивной, как и битовая логика.

0

Другой альтернативой было бы выйти за пределы XSLT и написать и подключить функцию расширения. Фактически, если есть существующая статическая функция Java, которая сделает это, некоторые XSLT-процессоры (например, Apache Xalan) позволят вам вызывать ее достаточно прямо. Это означает отказ от некоторой переносимости, поскольку вам нужно убедиться, что такое же расширение будет доступно везде, где вы запускаете таблицу стилей, но иногда это лучшее решение.

К сожалению, я не думаю, что стандартизированные функции расширения ESXLT включают в себя что-то для этой цели.

Смежные вопросы