Как удалить узел или тег из файла XML с помощью XSLT - PullRequest
0 голосов
/ 06 июля 2018

У меня есть XSl как

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:cdm="http://www.businessneed.com/cdm"   
    exclude-result-prefixes="fn cdm xs">
    <xsl:output method="xml" version="1.0" encoding="UTF-8"
        indent="yes" omit-xml-declaration="yes" exclude-result-prefixes="cdm" />
<xsl:template match="cdm:attributeList">
        <attributeList>     
        <xsl:apply-templates select="cdm:attribute" />  
</xsl:stylesheet>

и мой результирующий XML как

<attributeList>
             <attribute id="1680231133">
                   <attributeCode>FirstName</attributeCode>
                   <attributeValue>Vishal</attributeValue>
              </attribute>

            <attribute id="1680231134">
                   <attributeCode>LastName</attributeCode>
                   <attributeValue>Patil</attributeValue>
              </attribute>
            </attributeList>

Я хочу удалить

<attribute id="1680231133">
           <attributeCode>FirstName</attributeCode>
           <attributeValue>Vishal</attributeValue>
      </attribute>

Так что мой результат будет только

 <attributeList>    
    <attribute id="1680231134">
           <attributeCode>LastName</attributeCode>
           <attributeValue>Patil</attributeValue>
      </attribute>
    </attributeList>

Я уже пробовал это: -

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

Но не удалось работать

Как мне добиться этого, используя синтаксис XSL Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 06 июля 2018
<xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()" />
        </xsl:copy>
    </xsl:template>

 <xsl:template match="cdm:attributeList/cdm:attribute[cdm:attributeCode = 'FirstName']"/>

Я забыл поставить префикс пространства имен перед переменной "attributeCode"

0 голосов
/ 06 июля 2018

Попробуйте использовать приведенный ниже XSLT.

Он использует шаблон identity transform, чтобы скопировать входные данные как есть, а затем другой шаблон, чтобы удалить все элементы attribute, имеющие attributeCode = 'FirstName'.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" />
    <xsl:strip-space elements="*" />

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

    <xsl:template match="attribute[attributeCode = 'FirstName']" />
</xsl:stylesheet>

выход

<attributeList>
    <attribute id="1680231134">
        <attributeCode>LastName</attributeCode>
        <attributeValue>Patil</attributeValue>
    </attribute>
</attributeList>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...