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 09:38:40 -0000
I donbt have the original source any more and the problem is probably a bit underspecified, but herebs one solution.

Given this input

<doc>
  <source note="hello" noteAdditions="world" expert="HAHA"/>
</doc>

applying this stylesheet

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
  version="1.0">
  <xsl:template match="/*">
    <xsl:copy>
      <xsl:apply-templates select="source/@note"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="@note">
    <xsl:attribute name="{name()}">
      <xsl:value-of select="."/>
      <xsl:apply-templates select="../@noteAdditions"/>
    </xsl:attribute>
  </xsl:template>

  <xsl:template match="@noteAdditions">
    <xsl:text>&#xd;&#xa;</xsl:text>
    <xsl:value-of select="../@expert"/>
    <xsl:text>:</xsl:text>
    <xsl:value-of select="."/>
  </xsl:template>

</xsl:stylesheet>

yields

<doc note="hello&#xD;&#xA;HAHA:world"/>

This might give you an idea how to create your own solution.
Please note that in the stylesheet above, @expert will be discarded if there are no @noteAdditions. I donbt know whether that was you intention. This is what I meant to say by bunderspecifiedb.


Gerrit


On 19.06.2014 11:19, Philipp Kursawe phil.kursawe@xxxxxxxxx wrote:
Thanks Gerrit, your useful tips made it work now.

One more thing:
In the source xml I hava the attribute "note" and "noteAdditions" that I
want to combine together joined by another attributes value:
<source note="hello" noteAdditions="world" expert="HAHA">
<result note="hello&#xD;&#xA;HAHA:world">


On Thu, Jun 19, 2014 at 7:27 AM, Imsieke, Gerrit, le-tex gerrit.imsieke@xxxxxxxxx <mailto:gerrit.imsieke@xxxxxxxxx> <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx <mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>> wrote:



    On 19.06.2014 03:33, Philipp Kursawe phil.kursawe@xxxxxxxxx
    <mailto: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"
        attribute.

        That's what I came up with after your suggestions:
        <?xml version="1.0" encoding="UTF-8"?>
        <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/__1999/XSL/Transform
        <http://www.w3.org/1999/XSL/Transform>"
        xmlns:xs="http://www.w3.org/__2001/XMLSchema
        <http://www.w3.org/2001/XMLSchema>"
        xmlns:fn="http://www.w3.org/__2005/xpath-functions
        <http://www.w3.org/2005/xpath-functions>">
            <xsl:output method="xml" version="1.0" encoding="UTF-8"
        indent="yes"/>

            <xsl:template match="InspectionExt">
              <xsl:element name="ns2:__InspectionReportInput"
        namespace="http://__somenamespace <http://somenamespace>">
        <xsl:choose>
        <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:when> <xsl:otherwise> <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.

Gerrit



XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
EasyUnsubscribe <-list/225679>
(by email <>)

-- Gerrit Imsieke GeschC$ftsfC<hrer / Managing Director le-tex publishing services GmbH Weissenfelser Str. 84, 04229 Leipzig, Germany Phone +49 341 355356 110, Fax +49 341 355356 510 gerrit.imsieke@xxxxxxxxx, http://www.le-tex.de

Registergericht / Commercial Register: Amtsgericht Leipzig
Registernummer / Registration Number: HRB 24930

GeschC$ftsfC<hrer: Gerrit Imsieke, Svea Jelonek,
Thomas Schmidt, Dr. Reinhard VC6ckler

Current Thread