如何在xslt 2.0中使用ends-with?

时间:2016-11-08 17:33:49

标签: xslt

我正在尝试在xslt中使用ends-with来返回任何值。例如:我有这个xml:

<BOOKS>
    <BOOK>
        <TITLE>title1</TITLE>
        <ISSN>12313213</ISSN>
    </BOOK>
    <BOOK>
        <TITLE>title2</TITLE>
        <ISSN>67895776</ISSN>
    </BOOK>
    <BOOK>
        <TITLE>title3</TITLE>
        <ISSN>54363645</ISSN>
    </BOOK>
</BOOKS>

和这个静态xml(book.xml):

<BOOKS>
    <BOOK>
        <VALUE>test title12</VALUE>
        <PRICE>1235,23</PRICE>
    </BOOK>
    <BOOK>
        <VALUE>test title1</VALUE>
        <PRICE>345,23</PRICE>
    </BOOK>
</BOOKS>

我需要验证标题xml中是否有书名。我的代码:

<xsl:template match="/">
<xsl:variable name="book" select="document('file:///E:/book.xml')"/>
<BOOKS> 
    <xsl:for-each select="$book/books/book">
        <xsl:variable name="value" select="VALUE"/>
        <xsl:variable name="price" select="ESTRATO"/>
        <xsl:for-each select="//BOOKS">
            <xsl:for-each select="BOOK">
                <xsl:if test="ends-with($value, @TITLE)">
                    <BOOK>
                    <TITLE><xsl:value-of select="@TITLE"/></TITLE>
                    <ISSN><xsl:value-of select="$value"/></ISSN>
                    <PRICE><xsl:value-of select="$price"/></PRICE>
                    </BOOK>
                </xsl:if>
            </xsl:for-each>
        </xsl:for-each>
    </xsl:for-each>
</BOOKS>    
</xsl:template>

我希望在书名结束时返回 - 在xml书籍中的标签VALUE中。谁能帮我?感谢。

我尝试使用类似How to use contains in xslt?之类的东西,但没有用。

1 个答案:

答案 0 :(得分:1)

你的问题并不完全清楚。我你想做这样的事情:

XSLT 2.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:param name="book" select="document('file:///E:/book.xml')"/>

<xsl:template match="/BOOKS">
    <BOOKS> 
        <xsl:for-each select="BOOK">
            <BOOK>
                <xsl:copy-of select="TITLE | ISSN"/>
                <PRICE>
                    <xsl:value-of select="$book/BOOKS/BOOK[ends-with(VALUE, current()/TITLE)]/PRICE"/>
                </PRICE>
            </BOOK>
        </xsl:for-each>
    </BOOKS>    
</xsl:template>

</xsl:stylesheet>

请注意,XML区分大小写:book与/ BOOK不匹配。