Здесь я вставил образец XML с именами тегов, например 21A,50F,21D,22B
.
Обычно, если мне нужно получить определенный тег, я легко могу использовать приведенную ниже логику в XSLT:
<xsl:choose>
<xsl:when test="tag[name = '21A'] ">
<xsl:choose>
<xsl:when test="substring(tag[name = '21A']/value,1,1) = '/'">
<xsl:variable name="result" select="concat(translate(tag[name = '21A']/value,',',' '),' ')"/>
<xsl:value-of select="substring(substring-before(substring-after($result,' '),' '),1,11)"/>
</xsl:when>
<xsl:when test="substring(tag[name = '21A']/value,1,1) != '/'">
<xsl:value-of select="substring(tag[name = '21A']/value,1,11)"/>
</xsl:when>
</xsl:choose>
</xsl:when>
</xsl:choose>
но здесь у меня есть требование как Sequence A
и Sequence B
.
- теги, которые заполнены выше
50F
, подпадают под sequence A
- теги, которыенаходится под
50F
и подпадает под sequence B
, поскольку нам нужно извлечь теги, используя тег 50F
.Может ли кто-нибудь дать предложение?
<local>
<message>
<block4>
<tag>
<name>21A</name>
<value>ALW1031</value>
</tag>
<tag>
<name>50F</name>
<value>TESTING CITI BANK EFT9</value>
</tag>
<tag>
<name>21D</name>
<value>OUR</value>
</tag>
<tag>
<name>22B</name>
<value>ipubby</value>
</tag>
</block4>
</message>
</local>
Требуется вывод:
ALW1031,OUR
Ранее, если предположить, что они заполнили 21A
два раза, значит, я использовал позицию как [1]и [2] как при вызове значений тега.Теперь они будут заполнять 21 тег повторно, но теги могут быть A
или D
, поэтому мне нужно целенаправленно указывать на тег 50f
.Какой бы тег они ни предоставили, либо A
, либо D
до 50F
Мне нужно извлекать аналогичным образом все, что они заполняют теги после 50F
, мы можем выбирать так, избегая позиций.
Резюме : @ Treemonkey : надеюсь, вы взглянули на мой образец XML.У него есть тег типа 21A,50F
и так далее.Предположим, что если у меня есть два поля field1,field2
ранее, они заполняют теги такими же повторяющимися тегами, что и 21A
, в то время я выбрал значение 21A
, рядом с которым отмечена позиция [1] для поля 1 (tag[name = '21A'][1]
) * 1048.*
Аналогично 21A
, имея рядом с отметкой [2] для поля 2, теперь они будут заполнять 21
, но теги отличались от A
или D
.Как я уже сказал, field1
должен концентрироваться sequence A
, а field2
должен концентрироваться как sequence B
, поэтому теперь нам не нужно беспокоиться о позициях для выборки, у нас есть разграничение типа тега 50F
, какие поля будут заполняться до того, как 50F
будет иметьрассматривается как sequence A
, а после 50F
должно рассматриваться как sequence B
.
Итак, наконец, нам нужно написать как XSLT, нацелив 50
F.Если я хочу отобразить поле 21A
в (образец XML), которое до 50F
, поэтому нам нужно написать логику в XSLT в качестве тега выбора 21A
перед тегом 50F
для получения данных в поле 1, а для поля 2 мынужно выбрать как 21D
после 50F
, поэтому нам нужно написать логику как select 21D
после 50F
.