首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用带有样式表和xsltproc的xslt从xml中删除元素?

如何使用带有样式表和xsltproc的xslt从xml中删除元素?
EN

Stack Overflow用户
提问于 2008-11-26 19:24:57
回答 1查看 101.2K关注 0票数 71

我有很多XML文件,它们的形式如下:

代码语言:javascript
复制
<Element fruit="apple" animal="cat" />

我想把它从文件中删除。

使用XSLT样式表和Linux命令行实用程序xsltproc,我该如何做呢?

至此,在脚本中,我已经有了包含我希望删除的元素的文件列表,因此可以将单个文件用作参数。

编辑:这个问题最初是缺乏意图的。

我想要实现的是删除整个元素" element“where (猫”fruit==“&& animal=="cat")。在同一文档中有许多名为"Element“的元素,我希望这些元素能够保留下来。所以

代码语言:javascript
复制
<Element fruit="orange" animal="dog" />
<Element fruit="apple"  animal="cat" />
<Element fruit="pear"   animal="wild three eyed mongoose of kentucky" />

会变成:

代码语言:javascript
复制
<Element fruit="orange" animal="dog" />
<Element fruit="pear"   animal="wild three eyed mongoose of kentucky" />
EN

回答 1

Stack Overflow用户

发布于 2019-03-09 05:53:58

@Dimitre Novatchev给出的答案当然既正确又优雅,但有一个泛化( OP没有询问):如果您想要过滤的元素也有您想要保留的子元素或文本,该怎么办?

我认为这个小的变化涵盖了这种情况:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    version="2.0">

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

    <!-- drop DropMe elements, keeping child text and elements -->
    <xsl:template match="DropMe">
        <xsl:apply-templates/>
    </xsl:template>

</xsl:stylesheet>

要指定其他属性等,匹配条件可能很复杂,如果您要删除其他内容,则可以使用多个这样的模板。

所以这个输入:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<mydocument>
    <p>Here's text to keep</p>
    <p><DropMe>Keep this text but not the element</DropMe>; and keep what follows.</p>
    <p><DropMe>Also keep this text and <b>this child element</b> too</DropMe>, along with what follows.</p>
</mydocument>

生成以下输出:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?><mydocument>
    <p>Here's text to keep</p>
    <p>Keep this text but not the element; and keep what follows.</p>
    <p>Also keep this text and <b>this child element</b> too, along with what follows.</p>
</mydocument>

归功于XSLT Cookbook

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/321860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档