XML值提取需求:用XSLT排除filelist.txt生成新XML
没问题,这就帮你写出能精准排除filelist.txt的XSLT代码,不管它在XML里的哪个位置!
解决方案:排除XML中值为
filelist.txt的元素 下面是可以直接使用的XSLT代码,它会完整保留XML中所有内容,只排除文本值恰好是filelist.txt的元素,无论该元素在文档的哪个层级或位置:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 身份模板:默认复制所有节点、属性和文本 --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <!-- 匹配所有值为"filelist.txt"的元素,不生成输出(即排除) --> <xsl:template match="*[text()='filelist.txt']"/> </xsl:stylesheet>
代码说明
- 身份模板:这是XSLT的基础模板,作用是原样复制XML中的所有内容(元素、属性、文本节点等),确保除了我们指定要排除的部分,其他内容都完整保留。
- 排除模板:专门匹配所有文本内容等于
filelist.txt的元素,这个模板没有任何输出逻辑,所以匹配到的元素会被直接跳过,不会出现在最终的XML结果里。
增强鲁棒性:处理带空格的情况
如果你的XML中filelist.txt前后可能有多余的空格(比如 filelist.txt ),可以把排除模板改成下面这样,用normalize-space()去除文本前后的空格后再匹配:
<xsl:template match="*[normalize-space(text())='filelist.txt']"/>
示例演示
输入XML
<files> <entry>filelist.txt</entry> <document>manual.docx</document> <subfolder> <file>filelist.txt</file> <file>photo.jpg</file> </subfolder> </files>
转换后输出XML
<files> <document>manual.docx</document> <subfolder> <file>photo.jpg</file> </subfolder> </files>
内容的提问来源于stack exchange,提问作者Ramkumar Pande
相关产品推荐
相关产品推荐

