Добавьте пространство между узлами в XSLT - PullRequest
0 голосов
/ 02 июля 2018

XML файл:

     <string-name>
      <surname>Husebo</surname><given-names>BS</given-names>
    </string-name>, <string-name>
                     <surname>Ballard</surname> <given-names>C</given-names></string-name>

XSL : 

    <xsl:template match="surname">
        <xsl:choose>
            <xsl:when test = "following-sibling::node()[not(./*) and normalize-space(.)='']">
            <xsl:text> </xsl:text>
            </xsl:when>
            <xsl:otherwise>
                <xsl:apply-templates/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

вывод: Husebo BS, Ballard C

Я хочу добавить пробел между тегами < surname> и < given-name> после проверки пробела. ex - Для первых < string-name> между < surname> и < given-name> нет пробела, поэтому после проверки, что после < /surname> следует добавить пробел. но в теге 2nd < /string-name> пробел уже существует, поэтому пробел там не будет добавлен. пожалуйста помогите !!!

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Используйте этот код, надеюсь, он вам поможет:

<xsl:template match="surname[not(following-sibling::node()[1][self::text()[. = '&#x0020;']])]">
    <xsl:apply-templates/>
    <xsl:text> </xsl:text>
</xsl:template>

И если вы хотите сделать более конкретным, то проверьте, что дано имя ближайшего родственника, затем используйте этот код:

<xsl:template match="surname[not(following-sibling::node()[1][self::text()[. = '&#x0020;']]) and following-sibling::node()[1][self::given-names]]">
    <xsl:apply-templates/>
    <xsl:text> </xsl:text>
</xsl:template>
0 голосов
/ 02 июля 2018

Пока given-names не является обязательным, вы можете проверить, совпадает ли следующий текстовый узел со следующим узлом:

  <xsl:template match="surname">
    <xsl:choose>
      <xsl:when test="following-sibling::node()[1] != following-sibling::text()[1]">
        <xsl:apply-templates/>
        <xsl:text> </xsl:text>
      </xsl:when>
      <xsl:otherwise>
        <xsl:apply-templates/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
...