RE: [xsl] concatenate multiple attribute values and assign it to another attribute

Subject: RE: [xsl] concatenate multiple attribute values and assign it to another attribute
From: "Shaikh, Parvez" <Parvez.Shaikh@xxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 29 Mar 2007 17:58:25 -0400
the xml source looks like

<?xml version="1.0" encoding="utf-8"?>
<payload id="eRequest.Purchase Desktop or Laptop Inventory.Initiate">
  <erpayload>
    <basicinfo basicinfo_initiatorFullName="Shaikh, Parvez (pshaik) "
basicinfo_initiatorName="pshaik" basicinfo_requestExpectedDate="" />
    <genericrequestdetail genericrequestdetail_description="testing"
genericrequestdetail_include_section="true" />
    <purchasing purchasing_purchasing_status="   "
purchasing_acknowleged="" purchasing_btn_Add_CER_PO=""
purchasing_details="" purchasing_gl_account="1220033 - Compensation
(1220033)" purchasing_capital_sequence_number="8023"
purchasing_gl_project="170010 - ACE System"
purchasing_budget_year="2006" purchasing_item_description="testing"
purchasing_amount="0.00" purchasing_include_section="true">
      <add_CER_PO id="0" cer_number="" cer_created="" po_number=""
po_created="" Vendor="" />
      <cost_allocation_product id="0" project="170025 - Administrative
Services Support" percent="12" />
      <cost_allocation_product id="1" project="171574 - 401(k)
Management System" percent="1" />
      <cost_allocation_product id="2" project="170255 - Fundstation
System" percent="87" />
    </purchasing>
    <generalcomments generalcomments_comments=""
generalcomments_copyToChild="true"
generalcomments_include_section="true" />
    <attachments attachments_copyToChild="true"
attachments_include_section="true" />
    <promoted-property />
  </erpayload>
</payload>

and I am using

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

  <xsl:output method="xml"/>
  <xsl:template match="/">
    <erpayload>
      <xsl:apply-templates select="//erpayload/* |
//erpayload/purchasing/*"/>
    </erpayload>
  </xsl:template>
..
.
.
.
<xsl:template match="cost_allocation_product">
    <cost_allocation_product>
      <xsl:attribute name="cost_allocation_product_project">
        <xsl:for-each select="//cost_allocation_product">
          <xsl:value-of select="@project"/>
          <xsl:if test="position()!=last()">,</xsl:if>
        </xsl:for-each>
      </xsl:attribute>
      <xsl:attribute name="cost_allocation_product_percent">
        <xsl:for-each select="//cost_allocation_product">
          <xsl:value-of select="@percent"/>
          <xsl:if test="position()!=last()">,</xsl:if>
        </xsl:for-each>
      </xsl:attribute>
    </cost_allocation_product>
  </xsl:template>

</xsl:stylesheet>

-----Original Message-----
From: Shaikh, Parvez
Sent: Thursday, March 29, 2007 5:53 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: RE: [xsl] concatenate multiple attribute values and assign it
to another attribute



The reason I did that change was when I change it to testnode instead of
//testnode it does not output anything of testnode. Please note that
this is a part of a big xsl stylesheet that I am using.
It begins as
<xsl:template match="/">
    <erpayload>
      <xsl:apply-templates select="//erpayload/* |
//erpayload/purchasing/*"/>
    </erpayload>
  </xsl:template>

testnode is at erpayload/purchasing/testnode

I cannot change this as it affects many other xml forms



-----Original Message-----
From: Abel Braaksma [mailto:abel.online@xxxxxxxxx]
Sent: Thursday, March 29, 2007 5:41 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] concatenate multiple attribute values and assign it
to another attribute

Shaikh, Parvez wrote:
>
>
> based on michael kay response or abels response if I do, the problem
is
> I get 4 outputs of testnode
> i.e
>
> <testnode att1="1,2,3,4" att2="a,b,c,d" />
> <testnode att1="1,2,3,4" att2="a,b,c,d" />
> <testnode att1="1,2,3,4" att2="a,b,c,d" />
> <testnode att1="1,2,3,4" att2="a,b,c,d" />
>
>
>
> I want it to output only once.
> This is what I have done based on michaels response. The following is
a
> portion of the xslt file I have.
>
>  <xsl:template match="//testnode">
>    <testnode>
>  ....

This is not how (we / I) suggested it. You are matching for each and
every testnode here (it is never needed to have a match="//xyz", use
match="xyz" instead, which acts equally), of course you will create a
new node each time a 'testnode' is encountered. This is the reverse of
our solutions.

Please try our examples, they work 'out of the box' with the input you
gave us, and go from there.



-----------------------------------------
The information contained in this transmission may be privileged and
confidential and is intended only for the use of the person(s) named
above. If you are not the intended recipient, or an employee or agent
responsible
for delivering this message to the intended recipient, any review,
dissemination,
distribution or duplication of this communication is strictly
prohibited. If you are
not the intended recipient, please contact the sender immediately by
reply e-mail
and destroy all copies of the original message. Please note that we do
not accept
account orders and/or instructions by e-mail, and therefore will not be
responsible
for carrying out such orders and/or instructions.  If you, as the
intended recipient
of this message, the purpose of which is to inform and update our
clients, prospects
and consultants of developments relating to our services and products,
would not
like to receive further e-mail correspondence from the sender, please
"reply" to the
sender indicating your wishes.  In the U.S.: 1345 Avenue of the
Americas, New York,
NY 10105.

Current Thread