如何使用 xslt.. 过滤 xml 中的节点?
假设我有这个xml:
<college>
<student>
<name>amit</name>
<file>/abc/kk/final.c</file>
<rollno>22</rollno>
</student>
<student>
<name>sumit</name>
<file>/abc/kk/up.h</file>
<rollno>23</rollno>
</student>
<student>
<name>nikhil</name>
<file>/xyz/up.cpp</file>
<rollno>24</rollno>
</student>
<student>
<name>bharat</name>
<file>/abc/kk/down.h</file>
<rollno>25</rollno>
</student>
<student>
<name>ajay</name>
<file>/simple/st.h</file>
<rollno>27</rollno>
</student>
</college>
我在“.xsl”中使用for-each来显示节点的所有条目,但我只想显示文件名以“/abc/kk”开头的那些节点的条目我是 xslt 的新手..
请为我提供解决方案。
我正在使用:
<xsl:for-each select="college/student">
<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="file"/></td>
<td><xsl:value-of select="rollno"/></td>
</tr>
suppose i have this xml:
<college>
<student>
<name>amit</name>
<file>/abc/kk/final.c</file>
<rollno>22</rollno>
</student>
<student>
<name>sumit</name>
<file>/abc/kk/up.h</file>
<rollno>23</rollno>
</student>
<student>
<name>nikhil</name>
<file>/xyz/up.cpp</file>
<rollno>24</rollno>
</student>
<student>
<name>bharat</name>
<file>/abc/kk/down.h</file>
<rollno>25</rollno>
</student>
<student>
<name>ajay</name>
<file>/simple/st.h</file>
<rollno>27</rollno>
</student>
</college>
i am using for-each in ".xsl" to display all the entries of nodes, but i only want to display the entries of those node only in which file name starts with "/abc/kk" as i am new to xslt..
please provide me solution.
i am using :
<xsl:for-each select="college/student">
<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="file"/></td>
<td><xsl:value-of select="rollno"/></td>
</tr>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
此转换:
当应用于提供的 XML 文档时:
产生所需的正确结果:
说明:
与具有字符串值以“/abc/kk”开头的
file
子项的任何student
匹配的模板。这只是将生成的内容放入包装器tr
元素中。与任何没有正文的
student
匹配的模板,并有效地删除它(不会将此元素复制到输出)。该模板的优先级低于第一个模板,因为第一个模板更具体。因此,只有与第一个模板不匹配的student
元素才会使用第二个模板进行处理。与任何
student
元素的任何子元素匹配的模板。这只是将内容包装到td
元素中。This transformation:
when applied to the provided XML document:
produces the wanted, correct result:
Explanation:
A template matching any
student
having afile
child whose string value starts with '/abc/kk'. This just puts the generated contents in a wrappertr
element.A template matching any
student
that has no body and effectively deletes it (doesn't copy this element to the output). This template has a lower priority than the first one, because the first one is more specific. Therefore, onlystudent
elements that are not matched by the first template are processed with the second template.A template matching any child element of any
student
element. This just wraps the content into atd
element.像这样:
括号
[ ]
分隔一个“过滤器”,在该过滤器内,您可以拥有诸如starts-with()
之类的函数Like this:
The brackets
[ ]
delimit a "filter", and inside that filter you can have functions likestarts-with()
您也可以在
match
中使用[..]
:Also you can use
[..]
inmatch
: