如何在xslt中使用contains?

时间:2016-10-25 11:15:26

标签: xslt

我正在尝试使用xslt中的contains来返回任何值。 例如: 我有这个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(issn.xml):

<ISSNS>
    <ISSN>
        <VALUE>12313213, 67895776</VALUE>
        <PRICE>1235,23</PRICE>
    </ISSN>
    <ISSN>
        <VALUE>5463432, 54363645</VALUE>
        <PRICE>345,23</PRICE>
    </ISSN>
</ISSNS>

我需要验证在issn xml中是否有book issn。 我的代码:

<xsl:template match="/">
<xsl:variable name="issn" select="document('file:///E:/issn.xml')"/>
<BOOKS> 
    <xsl:for-each select="$issn/ISSNS/ISSN">
        <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="contains($value, @ISSN)">
                    <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> 

我希望当书籍包含在issn值中时返回。谁能帮我?感谢

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你想做:

XSLT 1.0

<xsl:stylesheet version="1.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="issns" select="document('file:///E:/issn.xml')"/>

<xsl:template match="/BOOKS">
    <BOOKS>
        <xsl:for-each select="BOOK">
            <xsl:variable name="issn" select="$issns/ISSNS/ISSN[contains(VALUE, current()/ISSN)] "/>
            <xsl:if test="$issn">
                <BOOK>
                    <xsl:copy-of select="*"/>
                    <xsl:copy-of select="$issn/PRICE"/>
                </BOOK>
            </xsl:if>
        </xsl:for-each>
    </BOOKS>
</xsl:template> 

</xsl:stylesheet>

请注意,这假设一个ISSN值不能包含另一个(可能会生成错误匹配)。