XSLT: Как выделить только текст, который появляется перед конкретным вложенным тегом, без выделения текста, который появляется после тега? - PullRequest
0 голосов
/ 13 мая 2019

Я новичок в xslt. Мой код xml:

        <tag1>
          text1
          <nestedTag Id="text2" /> 
          text3
        </tag1>

И я хочу получить этот вывод:

text1 text2 text3

Я пишу два шаблона:

  <xsl:template match="tag1">
     <b>
      <xsl:apply-templates select = "nestedTag" />
      <xsl:value-of select="."/>
     </b>
  </xsl:template>


  <xsl:template match="nestedTag">
    <xsl:value-of select="@Id"/>
  </xsl:template>

Но я получаю это:

text2 text1 text3

У меня вопрос: как разделить text1 и text3?

1 Ответ

1 голос
/ 13 мая 2019

Ваш элемент tag1 имеет три дочерних узла, текстовый узел, узел элемента и текстовый узел.Первый текстовый узел в общем случае может быть выбран с помощью text()[1], первый дочерний узел в целом - с помощью node()[1].

Но в контексте вашего примера и с XSLT достаточно заменить

  <xsl:apply-templates select = "nestedTag" />
  <xsl:value-of select="."/>

на

  <xsl:apply-templates/>

, так как он будет обрабатывать все дочерние узлы и встроенныев шаблонах для текстовых узлов будут выводить их.

...