gpt4 book ai didi

xslt - 如何使用 xslt 过滤 xml 中的节点?

转载 作者:行者123 更新时间:2023-12-01 09:07:15 24 4
gpt4 key购买 nike

假设我有这个 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>

最佳答案

本次改造 :

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>


<xsl:template match="student[starts-with(file,'/abc/kk')]">
<tr><xsl:apply-templates/></tr>
</xsl:template>

<xsl:template match="student/*">
<td><xsl:apply-templates/></td>
</xsl:template>

<xsl:template match="student"/>
</xsl:stylesheet>

当应用于提供的 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>

产生想要的正确结果:
<tr>
<td>amit</td>
<td>/abc/kk/final.c</td>
<td>22</td>
</tr>
<tr>
<td>sumit</td>
<td>/abc/kk/up.h</td>
<td>23</td>
</tr>
<tr>
<td>bharat</td>
<td>/abc/kk/down.h</td>
<td>25</td>
</tr>

说明 :
  • 匹配任何模板 student有一个 file字符串值以 '/abc/kk' 开头的子级 .这只是将生成的内容放在包装器中 tr元素。
  • 匹配任何模板 student 没有正文并有效删除它(不将此元素复制到输出)。此模板的优先级低于第一个,因为第一个更具体。因此,只有student与第一个模板不匹配的元素用第二个模板处理。
  • 匹配任何 student 的任何子元素的模板元素 .这只是将内容包装成 td元素。
  • 关于xslt - 如何使用 xslt 过滤 xml 中的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5578602/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com