【问题标题】:How match non string in xslt如何匹配xslt中的非字符串
【发布时间】:2021-01-06 11:26:11
【问题描述】:

我想匹配xslt 2.0中的非字符串。

<td><list>
        <list-item>
            <p>aaaa</p>
            <list>
                <list-item>
                    <p>bbb</p>
                </list-item>
            </list>
        </list-item>
    </list>
</td>

我做过这样的模板

<xsl:template match="td">
    <para>
        <xsl:apply-templates/>
    </tps:p>
</xsl:template>

当输入xml如下:

<td><list>
        <list-item>
            <p>aaaa</p>
            <list>
                <list-item>
                    <p>bbb</p>
                </list-item>
            </list>
        </list-item>
    </list>
kmkmkmk
</td>

输出(正确输出):

<para>kmkmkmk</para>

当像下面这样输入xml时(td和list之间的新行):

<td><list>
        <list-item>
            <p>aaaa</p>
            <list>
                <list-item>
                    <p>bbb</p>
                </list-item>
            </list>
        </list-item>
    </list>
</td>

输出(输出不正确):

<para> </para>

但是当输入如下 xml 时(td 和 list 之间没有新行):

<td><list>
        <list-item>
            <p>aaaa</p>
            <list>
                <list-item>
                    <p>bbb</p>
                </list-item>
            </list>
        </list-item>
    </list></td>

输出(正确输出):

nothing display

我想在td 没有任何文本的时候做任何显示和显示只显示td 有文本。

为什么在&lt;td&gt;&lt;list&gt; 之间有一条新线路不能正常工作,而哪里没有新线路工作良好。我该如何解决这个问题?

【问题讨论】:

    标签: xslt-2.0


    【解决方案1】:

    您的示例不是最小且完整的,而是要转换一个 td 元素节点,该节点具有您可以使用的非空白文本子内容

    <xsl:template match="td[text()[normalize-space()]]">
      <para>
        <xsl:apply-templates/>
      </para>
    </xsl:template>
    

    您是否还需要&lt;xsl:template match="td[not(text()[normalize-space()])]"/&gt;&lt;xsl:template match="td[not(text()[normalize-space()])]"&gt;&lt;xsl:apply-templates/&gt;&lt;/xsl:template&gt; 取决于您如何设置其余的转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 2012-03-20
      相关资源
      最近更新 更多