XSLT检查String是否在一个集合内
我想检查一个string是否包含在一个集合。 我有一个Excel表格,我转换成一个xml
文件; 例:
左侧的Excel工作表和右侧的转换工作表( RowData.xml
):
所以我有一个xml
文件,这些数字可能会或可能不会在那里。 例如,源xml
可能如下所示:
Source.xml:
<Data> <Number>5556781234</Number> <Number>5556781235</Number> <Number>5556781236</Number> </Data>
如你所见,它可以在任何地方停止。 源xml
文件可能具有RowData.xml
列出的所有数字,也可能只有一个或多个。 所以我的问题是,如何检查我的xslt
文件?
我想做这个:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- This is the Excel sheet converted to an XML file --> <xsl:param name="sheet-uri" select="'RowData.xml'"/> <xsl:param name="sheet-doc" select="document($sheet-uri)"/> <xsl:template match="Data"> <xsl:for-each select="Data/Number"> <xsl:variable name="continue" select="$sheet-doc//Sheet/Row[Number = current()]/Continue"/> <xsl:if test=""> <!-- Check the Source.xml against the RowData.xml and see if the set contains any "No"'s in it. --> <!-- If it does then don't do the following --> <Data2> <Number><xsl:value-of select="Number"/></Number> <Timestamp>125222</Timestamp> </Data2> </xsl:if> </xsl:for-each> </xsl:template>
所以基本上,在制作<Data2>
元素之前,请检查Source.xml
的数字,并查看RowData.xml
是否有任何这些数字的值为No
的列。 我不知道如何使上面的if
语句。 我知道在xslt
有一个contains()
函数; 但是,我不知道如何在这里使用它。
这可能吗? 请让我知道是否有任何混淆。 提前致谢!
检查Source.xml中的数字,看看RowData.xml中是否有任何这些数字的值为No。
您可以在这里利用XSLT的“存在平等”运算符:
test="doc('source.xml')/Data/Number = $sheet-doc//Sheet/Row[Continue='No']/Number"
本质上,如果A和B是值集,那么如果A中的某个值等于B中的某个值,则A = B返回true。
我build议你使用关键的机制 – 特别是。 如果您使用的是XSLT 2.0。
定义一个关键字为:
<xsl:key name="row" match="Row" use="Number" />
然后做:
<xsl:template match="/Data"> <xsl:for-each select="Number[not(key('row', ., $sheet-doc))]"> <Data2> <xsl:copy-of select="."/> <Timestamp>125222</Timestamp> </Data2> </xsl:for-each> </xsl:template>
这只会selectRowData.xml
文档中没有相应Row
Number
元素。