在XSLT

时间:2018-07-02 05:40:48

标签: xslt-2.0

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 :(得分:1)

使用此代码希望对您有所帮助:

<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>

答案 1 :(得分:0)

只要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>