首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将一个xsl模板输出传递给XSLT中的其他xsl模板输入以供进一步处理。

将一个xsl模板输出传递给XSLT中的其他xsl模板输入以供进一步处理。
EN

Stack Overflow用户
提问于 2015-09-18 16:50:31
回答 1查看 731关注 0票数 0

我是XSLT中的新手,我需要根据属性值删除几个子节点,然后在属性值下没有子标记的情况下删除其父节点。

,例如示例XML输入类型1:

代码语言:javascript
运行
复制
  <?xml version="1.0" encoding="UTF-8"?>
<GrandFather>
   <Father>
      <Father-bro>Bro</Father-bro>
      <Father-sis>Sis</Father-sis>
      <Child name="real">Real Children</Child>
      <Child name="fake">FakeChildren</Child>
   </Father>
</GrandFather>

预期输出:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<GrandFather>
   <Father>
      <Father-bro>Bro</Father-bro>
      <Father-sis>Sis</Father-sis>
      <Child name="real">Real Children</Child>
   </Father>
</GrandFather>

,例如示例XML输入类型2:

代码语言:javascript
运行
复制
  <?xml version="1.0" encoding="UTF-8"?>
<GrandFather>
   <Father>
      <Father-bro>Bro</Father-bro>
      <Father-sis>Sis</Father-sis>
      <Child name="fake">Real Children</Child>
      <Child name="fake">FakeChildren</Child>
   </Father>
</GrandFather>

OutPut:如果没有名称属性为“假”的子标记,则移除父标记;如果根本没有父标记,则移除祖父标记(因为父标记将从早期逻辑中删除)

代码语言:javascript
运行
复制
  <?xml version="1.0" encoding="UTF-8"?>

Requirement:

如果子标记具有"name“属性值为”value“,那么我们应该删除该特定的子标记。所有子标记都可以具有“假”或“无”的名称属性。在那次检查之后:

如果父标签下没有子标签,那么也移除父标记,否则删除带有名称属性为“假”的独生子标记,并将真实的子标记与其他标记一起保留。

如果祖父标签下没有父亲标签,则移除祖父标签。

My Code:我能够编写xsl,它将删除所有将名称属性包含为“假”的子标记。但是,当我对父标记或祖父标记做同样的操作时,它不会考虑已删除的子xml (第一个xsl: template的输出),而是检查原始的xml模板。

示例输入xml类型1 (这将删除所有属性名为“”的子程序),但当输入类型为样例输入xml 2时,它将不覆盖。

代码语言:javascript
运行
复制
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:output omit-xml-declaration="yes"/>

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

    <xsl:template match="//Child[@name='fake']"/>

</xsl:stylesheet>

有人能帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2015-09-20 10:05:51

我相信你只需一次就能做到这一切:

XSLT1.0

代码语言:javascript
运行
复制
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

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

<xsl:template match="/">
    <xsl:apply-templates select="GrandFather[Father/Child[not(@name='fake')]]"/>
</xsl:template>

<xsl:template match="GrandFather">
    <xsl:copy>
        <xsl:apply-templates select="Father[Child[not(@name='fake')]]"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="Child[@name='fake']"/>

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

https://stackoverflow.com/questions/32657227

复制
相关文章

相似问题

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