【问题标题】:Duplicate nodes in XMLXML 中的重复节点
【发布时间】:2012-02-08 08:27:56
【问题描述】:

我想应用一个 XSL 样式表来删除我的 xml 中的重复节点。 我测试了一些解决方案,但我做不到:(我的程序在 Visual C# Studio 中。

我有以下 XML:

<store>

 <laptop>
  <ID>1</ID>
  <price>X2</price>
 </laptop>

 <laptop>
  <ID>2</ID>
  <price>X1</price>
 </laptop>

 <laptop>
  <ID>8</ID>
  <price>X2</price>
 </laptop>

 <laptop>
  <ID>2</ID>
  <price>X3</price>
 </laptop>

</store>

想要的输出是:

    <store>

     <laptop>
      <ID>1</ID>
      <price>X2</price>
     </laptop>

     <laptop>
      <ID>8</ID>
      <price>X2</price>
     </laptop>

     <laptop>
      <ID>2</ID>
      <price>X3</price>
     </laptop>

    </store>

【问题讨论】:

    标签: xml xsd xml-parsing


    【解决方案1】:

    下面的解决方案可以满足您的要求,并按以下方式工作:

    1. 第一个模板从根开始并选择所有 ID 标签 下面没有具有相同值的 ID 标签(这就是 ID 2 出现在 输出结束)
    2. 循环遍历ID节点列表并输出parent() 和所有的孩子

    欢迎评论,这是我在过去两年中第一次尝试 XSL。 我尝试了 xsl:copy 但它没有包含孩子的标签名称,但值显示了,不知道为什么!?

    从它的内容中提取了一些内容:

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

    工作代码:

     <xsl:stylesheet 
            xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
            exclude-result-prefixes="xs">
    
        <xsl:template match="/">
         <store>
         <xsl:variable name="non-duplicates"
         select="//ID[not(.=following::ID)]" />   
    
         <xsl:for-each select="$non-duplicates">
           <xsl:copy-of select="parent::*"/>
         </xsl:for-each>
         </store>
        </xsl:template>
    </xsl:stylesheet>
    

    【讨论】:

      猜你喜欢
      • 2011-02-15
      • 2011-02-05
      • 2018-02-16
      • 2013-04-13
      • 2014-04-05
      • 1970-01-01
      • 2017-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多