[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] Copy all attributes except except some

Subject: Re: [xsl] Copy all attributes except except some
From: "Imsieke, Gerrit, le-tex gerrit.imsieke@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 19 Jun 2014 05:27:01 -0000

On 19.06.2014 03:33, Philipp Kursawe phil.kursawe@xxxxxxxxx wrote:
The resulting XML should contain only 2 attributes from "InspectionExt"
in case result="10" or "11" otherwise all attributes and "Obligations",
"Defects" but no "Photo"
Also when copying the Defects/Defect items, only those with
"not(@reinspection='ok'" should be copied over. No "Defects" element
should be created if nothing from source xml is copied.
The resulting "Defect" element must not contain the "reinspection"

That's what I came up with after your suggestions:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
   <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

   <xsl:template match="InspectionExt">
     <xsl:element name="ns2:InspectionReportInput"
<xsl:when test="@result eq '10' or @result eq '11'">

In XPath 1, there is no eq operator. Use = instead.

<xsl:copy-of select="@result"/>
<xsl:copy-of select="@expert"/>
       <xsl:copy-of select="@*[not(@signed)]"/>
       <xsl:for-each select="Defects">
         <xsl:element name="Defects">
           <xsl:for-each select="Defect[not(@reinspection='ok')]">
             <xsl:element name="Defect">
               <xsl:copy-of select="@*[not(@reinspection)]"/>

You are selecting all attributes that don't have a reinspection attribute attached to them. Since no attribute carries other attributes, your predicate is always true. Use @*[not(name() = 'reinspection')] instead.


Current Thread