XSLT:如何删除某些子项中的一个属性

时间:2017-08-23 18:35:41

标签: xslt nodes

我谷歌搜索了很多,并且无法弄清楚如何删除特定子节点中的特定属性。在这个例子中,我想删除" name"属性,但仅限于" alternate"父项 - 不是其他任何地方。在此示例中,请保留" name"例如,参考属性,但删除备用.....下的那些属性。

从这个XML开始

    <products>
<product id="123456">
   <alternate-products>
      <alternate>
         <number>2002</number>
         <name>2002</name>            <-- want to remove this one
      </alternate>
      <alternate>
         <number>2002</number>
         <name>2002</name>            <--- remove this one too
      </alternate>
   </alternate-products>
   <references>
      <reference>
         <name>2002</name>           <-- keep this one - not under alternate
         <date>2002</date>
      </reference>
   </references>   
</products>

所需的XML:

<products>
   <product id="123456">
   <alternate-products>
      <alternate>
         <number>2002</number>
      </alternate>
      <alternate>
         <number>2002</number>
      </alternate>
   </alternate-products>
   <references>
      <reference>
         <name>2002</name>           <-- still there - good!
         <date>2002</date>
      </reference>
   </references>   
</products>

任何人都可以提供一些提示吗?

2 个答案:

答案 0 :(得分:1)

  

我想删除“name”属性元素,但仅限于“alternate”下   父项 - 不是其他任何地方。

容易做到:

XSLT 1.0

function shoCount() {
    if (count == 1) {
        document.getElementById("test").innerHTML = "A";
    } else if (count == 2) {
        document.getElementById("test").innerHTML = "B";
    } else if (count > 2) {
        alert('invalid');
    }
}

答案 1 :(得分:-2)

你可以试试这个:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

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

    <xsl:template match="alternate/name"/>
</xsl:stylesheet>