XSLT изменить значение - PullRequest
       4

XSLT изменить значение

2 голосов
/ 20 апреля 2011

У меня есть XML, который мне нужно преобразовать в другой XML.

Что мне нужно сделать, так это изменить значение одного из элементов следующим образом. В источнике у меня это

<NUM>I19071230</NUM>

Мне нужно заменить первую букву на «ABCD», которая исправлена. Так и станет этим

ABCD19071230

Тогда мне нужно убедиться, что общая длина равна 14. Если это не так, добавьте 0 между ABCD и результат должен выглядеть следующим образом.

ABCD0019071230

Мне нужно сохранить это значение в переменной, чтобы его можно было использовать повторно. Я использую XSLT 1.0. Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 20 апреля 2011

Использование :

<xsl:variable name="vComposed" select=
   "concat('ABCD',
           substring('000000000000000',
                     1,
                     14 -string-length(NUM) -3),
           substring(NUM, 2, 10)
           )
 "/>

Вот краткое преобразование с использованием этой переменной :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
  <xsl:variable name="vComposed" select=
   "concat('ABCD',
           substring('000000000000000',
                     1,
                     14 -string-length(NUM) -3),
           substring(NUM, 2, 10)
           )
 "/>

 <xsl:value-of select="$vComposed"/>
 </xsl:template>
</xsl:stylesheet>

Когда это преобразованиеприменяется к предоставленному документу XML:

<NUM>I19071230</NUM>

желаемый, правильный результат получается :

ABCD0019071230

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

2 голосов
/ 20 апреля 2011

Используйте это выражение XPath:

concat(
   substring(
      'ABCD0000000000',
      1,
      15 - string-length(NUM)
   ),
   substring(NUM,2)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...