2015-10-21 4 views
0

У меня есть элемент, который заполняется со значением, которое всегда имеет следующий формат:XSLT удалить начальные символы, подчеркивания и конечные символы

  • 6 символов (буквенно-цифровой)
  • Underscore
  • 8 цифр
  • Подчеркивание 6 цифр
  • Переменная (иногда в другое время не было другого подчеркивания, а строка длиной от одного до пяти символов .

Некоторые примеры:

<ID>MBAA01_20151014_103605_H3Y</ID> 
<ID>34FG01_22251123_341234</ID> 
<ID>F6F7G8_30151124_279321_YU</ID> 
<ID>123SDT_45891212_345321</ID> 

Я пытаюсь написать XSLT, который будет:

  • Удалить первые 7 символов (например, 6 и подчеркивание)
  • Удалить подчеркивание между набор из 8 цифр и 6 цифр
  • Удалите все символы, если они есть, которые соответствуют набору из 6 цифр.

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

<ID>20151014103605</ID> 
<ID>22251123341234</ID> 
<ID>30151124279321</ID> 
<ID>45891212345321</ID> 

Фактический оригинальный источник XML будет выглядеть следующим образом:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<FeedbackAssets> 
      <ID>MBAA01_20151014_103605_H3Y</ID> 
      <PlanNumber1>A01</PlanNumber1> 
      <PlanNumber2>B02</PlanNumber2> 
      <PlanNumber3>CA03</PlanNumber3> 
      <PlanNumber4>D04</PlanNumber4> 
      <PlanNumber5>F5</PlanNumber5> 
</FeedbackAssets> 
<FeedbackAssets> 
      <ID>34FG01_20151123_341234</ID> 
      <PlanNumber1>MM4</PlanNumber1> 
      <PlanNumber2>11</PlanNumber2> 
      <PlanNumber3>CA03</PlanNumber3> 
      <PlanNumber4>D6</PlanNumber4> 
      <PlanNumber5>Y5</PlanNumber5> 
</FeedbackAssets> 
<FeedbackAssets> 
      <ID>F6F7G8_20151124_279321_YU</ID> 
      <PlanNumber1>ZZ5</PlanNumber1> 
      <PlanNumber2>B02</PlanNumber2> 
      <PlanNumber3>CA03</PlanNumber3> 
      <PlanNumber4>D04</PlanNumber4> 
      <PlanNumber5>FR5</PlanNumber5> 
</FeedbackAssets> 
<FeedbackAssets> 
      <ID>123SDT_20151212_345321</ID> 
      <PlanNumber1>WE4</PlanNumber1> 
      <PlanNumber2>G6H</PlanNumber2> 
      <PlanNumber3>CA03</PlanNumber3> 
      <PlanNumber4>D04</PlanNumber4> 
      <PlanNumber5>G5</PlanNumber5> 
</FeedbackAssets> 

Спасибо

+0

XSLT 1.0 или XSLT 2.0 ? – potame

ответ

1

Я пытаюсь написать XSLT, который будет:

  • Удалить первые 7 символов (6 и подчеркивание)
  • Удалите подчеркивание между набором из 8 цифр и 6 цифр
  • Удалить любые символы, если есть, которые следуют за набором из 6 цифр ,

Это может быть пересчитаны как:

  • Удалить все символы подчеркивания;
  • Пропустить первые 6 символов и вернуть следующие 14 символов.

Предполагая, что шаблон, соответствующий ID это сводится к:

<xsl:value-of select="substring(translate(., '_', ''), 7, 14)" /> 
+0

Вау! Еще раз спасибо! Ты помог мне и на прошлой неделе. Это прекрасно работает. –

0

С XSLT 2.0 вы можете использовать регулярные выражения на основе замены:

<xsl:template match="ID"> 
    <ID> 
    <xsl:value-of select="replace(./text(), '[A-Z0-9]{6}_(\d{8})_(\d{6})(_[A-Z0-9]{1,5})?', '$1$2')"/> 
    </ID> 
</xsl:template> 
Смежные вопросы