【问题标题】:remove xml tags with XSLT使用 XSLT 删除 xml 标记
【发布时间】:2010-04-14 23:11:41
【问题描述】:

我有以下 xml 文件:

<xfa:data>
  <form1>
    <Page1>
    <Page2>
    <contractInfo> ... </contractInfo>
    <paymentInfo> ... </paymentInfo>
  </form1>
  <commercialType> .... </commercialType>
  <userList> ... </userList>
  <officesList> ... </officesList>
  <commercialType> .... </commercialType>
  <userList> ... </userList>
  <officesList> ... </officesList>
  <commercialType> .... </commercialType>
  <userList> ... </userList>
  <officesList> ... </officesList>
</xfa:data>

我想删除commerceType、userList 和officeList 节点的每一次出现,所以我的输出是:

<xfa:data>
  <form1>
    <Page1>
    <Page2>
    <contractInfo> ... </contractInfo>
    <paymentInfo> ... </paymentInfo>
  </form1>
</xfa:data>

我如何使用 XSLT 做到这一点?

谢谢

【问题讨论】:

  • 好问题 (+1)。有关使用和覆盖 identity rule 的完整解决方案,请参阅我的答案。 :)

标签: xml xslt


【解决方案1】:

这种转换产生了预期的结果

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

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

 <xsl:template match="commercialType|userList|officesList"/>
</xsl:stylesheet>

【讨论】:

  • @Rohit,什么是“它”,什么是“不起作用”?您确定您拥有与此问题相同的源 XML 文档吗?您确定要执行与此答案中相同的转换吗?您确定您使用的是兼容的、没有错误的 XSLT 处理器吗?
  • @DimitreNovaatchev 我没有相同的 xml 或 xslt 但相似。我正在使用 Visual Studio 2012。我发现使用默认命名空间不起作用。谢谢,现在可以使用了。
  • @Rhyous, 'xmlns="..."' 是默认命名空间的声明。 xmlns:somePrefix = "..." 是非默认命名空间的声明。您的问题是常见问题解答。搜索“default namespace and XPath”,你会发现很多很好的解释。是的,如果在源 XML 文档中使用名称空间,则需要修改此答案。但是,当前的问题没有这样的源 XML 文档。因此,请再次阅读其他问题,关于命名空间的主题有很多。
  • @zygimantus,也许这个答案会有所帮助:stackoverflow.com/a/10712711/36305
  • @zygimantus,是的,你需要做搜索或更系统的学习。只需在匹配模板中添加&lt;xsl:applu-templates/&gt;
【解决方案2】:

身份转换加&lt;xsl:template match="commercialType" priority="10"/&gt;

【讨论】:

    猜你喜欢
    • 2021-09-17
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多