как получить значение из тега через XML с помощью xslt - PullRequest
0 голосов
/ 03 июня 2011

Привет, если я предоставляю логику, прямо как значение (<xsl:value-of select="value"/>) означает, что он выбирается правильно

, если предположим, если я пытаюсь извлечь с какой-то логикой, такой как

<xsl:variable name ="del50k" select ="(translate(substring-after(value,'&#13;'),'&#13;','~'))"/>
    <xsl:value-of select="concat(substring(value, 1, 5), ',',substring(substring-before(value,'&#13;'),6), ',',$del50k)" /> 

для этогоxml

 <swift>
 <message>
  <block2 type="input">
  <messageType>102</messageType>
  <receiverAddress>BKTRUS33XBRD</receiverAddress>
  <messagePriority>N</messagePriority>     
</block2>
<block3>
<tag>
   <name>32</name>
   <value>praveen</value>
</tag>
<tag>
   <name>42</name>
   <value>pubby</value>
</tag>
</block3> 
<block4>
 <tag>
   <name>32A</name>
   <value>051008EUR1009.43</value>
 </tag>
<tag>
    <name>77</name>
    <value>PUBBYPRAVZ</value>
</tag>
<tag>
   <name>21</name>
   <value>UK</value>
 </tag>
 <tag>
    <name>21</name>
    <value>USA</value>
  </tag>
  <tag>
<name>50K</name>
<value>
0601/045788775099
shanmu
MENENDEZ Y PELAYOA CORUNA SPA
</value>
   </tag>
   <tag>
<name>50K</name>
<value>
0501/045788775099
Praveen
MENENDEZ Y PELAYOA CORUNA SPA
</value>
</tag>
    <tag>
      <name>76</name>
      <value>shanmu</value>
    </tag>
 </block4>
</message>
</swift>

`

Я применил эту логику xslt, как показано ниже

<xsl:template match="swift/message/block4/tag [name='21']">     

    <xsl:value-of select="value"/>,<xsl:text/>

    <xsl:variable name="posi" select="position()"/>
    <xsl:apply-templates select="../../block4/tag [name='50K'] [position()=$posi]"/>clrf



</xsl:template>

 <xsl:template  match="/swift/message/block4/tag [name='50K']"> 
    <xsl:variable name ="del50k" select ="(translate(substring-after(value,'&#13;'),'&#13;','~'))"/>
    <xsl:value-of select="concat(substring(value, 1, 5), ',',substring(substring-before(value,'&#13;'),6), ',',$del50k)" /> 
</xsl:template>

Ожидаемый результат Остальные теги TAG 50k работают

UK, 0601 /, 045788775099, Шанму ~ MENENDEZ Y PELAYOA CORUNA SPA США, 0501 /, 045788775099, Правин ~ MENENDEZ Y PELAYOA CORUNA SPA

1 Ответ

0 голосов
/ 03 июня 2011
<xsl:template match="swift/message/block4/tag [name='21']">

В предоставленном XML-документе нет элемента tag, чей дочерний элемент name имеет строковое значение '21', и который (элемент tag) является дочерним элементом элемента block4, который является дочерним элементом Элемент message, являющийся дочерним элементом элемента swift.

Следовательно, шаблон вообще не применяется и результаты, которые он должен давать, не выдаются.

...