Как я могу получить указанные c значения, содержащиеся в повторяющемся элементе 'xsl: when'? - PullRequest
0 голосов
/ 24 февраля 2020

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

<ServiceDetails>
  <xsl:for-each select="$TagList">
    <xsl:choose>
      <xsl:when test="contains(@ItemName, 'Test1')">
        <Qty>
          <xsl:value-of select="Value" />
        </Qty>
        <ReasonCode>
          <__name>Value1</__name>
        </ReasonCode>
      </xsl:when>
    </xsl:choose>
  </xsl:for-each>
  <xsl:for-each select="$TagList">
    <xsl:choose>
      <xsl:when test="contains(@ItemName, 'Test2')">
        <Qty>
          <xsl:value-of select="Value" />
        </Qty>
        <ReasonCode>
          <__name>Value2</__name>
        </ReasonCode>
      </xsl:when>
    </xsl:choose>
  </xsl:for-each>
</ServiceDetails>

Мне нужно извлечь значения из <__name> и атрибут в элементе <xsl:when>. (В этом примере: Test1, Test2)

Я хочу, чтобы вывод выглядел следующим образом:

Test1  Value1
Test2  Value2

Я смог вывести один узел, используя приведенный ниже код, но форматирование заканчивается лишним интервалом и отступом в выходном текстовом файле.

 <?xml version="1.0" encoding="UTF-8" ?>
    <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
        <xsl:output method="xml" encoding="UTF-8" indent="yes" />
     <xsl:template match="/ServiceDetails">
          <xsl:copy>
                <xsl:apply-templates/>
            </xsl:copy>
     </xsl:template>
     <xsl:template match="ReasonCode">
           <xsl:value-of select="__name/text()"/>
     </xsl:template>
    </xsl:transform>

1 Ответ

0 голосов
/ 24 февраля 2020

Во-первых, я не вижу в вашей таблице стилей ничего, что пыталось бы вывести первый столбец (Test1, Test2).

Во-вторых, причина того, что в выходных данных есть лишние пробелы, заключается в том, что что правила встроенного шаблона копируют все текстовые узлы (пробельные символы) из входных данных в выходные. Вы можете подавить это с помощью

<xsl:template match="text()/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...