XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
(Deleted User) Subject: Select one of multiple attributes?
Author: (Deleted User)
Date: 08 Dec 2008 03:15 PM
Hi there,

I have in vain tried to map an element's value if its attribute name has a certain value. No luck so far, hope you can help.

XML snippet:
<UserArea><nl:TimeCard><nl:ReportedResource><nl:Person><nl:Id><nl:IdValue>9688259</nl:IdValue></nl:Id><nl:PersonName><nl:LegalName>RWJ GOFFIN</nl:LegalName></nl:PersonName></nl:Person></nl:ReportedResource><nl:ReportedTime><nl:PeriodStartDate>2007-05-28</nl:PeriodStartDate><nl:PeriodEndDate>2007-06-03</nl:PeriodEndDate><nl:TimeInterval type="Regular"><nl:StartDateTime>2007-05-28</nl:StartDateTime><nl:EndDateTime>2007-06-03</nl:EndDateTime><nl:RateOrAmount currency="EUR" type="hourly" multiplier="+100.00"> +22.55</nl:RateOrAmount></nl:TimeInterval></nl:ReportedTime></nl:TimeCard><nl:StaffingAdditionalData><nl:CustomerReportingRequirements><nl:DepartmentName></nl:DepartmentName><nl:CustomerReferenceNumber></nl:CustomerReferenceNumber><nl:AdditionalRequirement requirementTitle="geboortedatum"></nl:AdditionalRequirement><nl:AdditionalRequirement requirementTitle="Postcode Plaats"></nl:AdditionalRequirement><nl:AdditionalRequirement requirementTitle="werkweeknummer">22</nl:AdditionalRequirement><nl:AdditionalRequirement requirementTitle="plaatsingsnummer">003221554</nl:AdditionalRequirement></nl:CustomerReportingRequirements></nl:StaffingAdditionalData></UserArea>

My xsl to map the nl:AdditionalRequirement if the requirementTitle attribute is "plaatsingsnummer":
<xsl:for-each select="a:UserArea/nl:StaffingAdditionalData/nl:CustomerReportingRequirements">
<Description>
<xsl:choose>
<xsl:when test="a:UserArea/nl:StaffingAdditionalData/nl:CustomerReportingRequirements/nl:AdditionalRequirement/@requirementTitle = 'plaatsingsnummer'">
<xsl:text>plaatsingsnummer exists</xsl:text>
</xsl:when>
<xsl:otherwise>no plaatsingsnummer</xsl:otherwise>
</xsl:choose>
</Description>
</xsl:for-each>

If I skip the for each I at least get a message "no plaatsingsnummer", but there is one, so how can I map it?

Thanks!


Cynthia

Postnext
(Deleted User) Subject: Select one of multiple attributes?
Author: (Deleted User)
Date: 08 Dec 2008 03:25 PM
Hi Cynthia,
inside the for-each instruction, your current element is now one of the a:UserArea/nl:StaffingAdditionalData/nl:CustomerReportingRequirements elements, so the inner test must be done only using nl:AdditionalRequirement/@requirementTitle = 'plaatsingsnummer'.

Alberto

Postnext
(Deleted User) Subject: Select one of multiple attributes?
Author: (Deleted User)
Date: 08 Dec 2008 04:26 PM
Hi Alberto,

I tried it with the for each round the Description element and inside but then I get no tag at all in the result. Without the for each I at least get a result (no plaatsingsnummer).

I am still doubting the for each though I think I should use it as the nl:AdditionalRequirement can occur multiple times. If I use a straight link in the mapper to see if I at least can see the value of element I also get no result. What am I missing?

Last tested (with the for each inside and around the element):
<xsl:for-each select="a:UserArea/nl:StaffingAdditionalData/nl:CustomerReportingRequirements">
<xsl:choose>
<xsl:when test="nl:AdditionalRequirement/@requirementTitle = 'plaatsingsnummer'">
<xsl:text>plaatsingsnummer exists</xsl:text>
</xsl:when>
<xsl:otherwise>no plaatsingsnummer</xsl:otherwise> </xsl:choose>
</xsl:for-each>

Grtz,


Cynthia

Postnext
(Deleted User) Subject: Select one of multiple attributes?
Author: (Deleted User)
Date: 09 Dec 2008 02:46 AM
Hi Cynthia,
if the for-each is not even entering the loop (i.e. if you are not seeing anything by executing the code) it could be that the XPath expression shouldn't start with a:UserArea; can you attach the source XML, and the XSLT code preceding this fragment?

Alberto

Postnext
(Deleted User) Subject: Select one of multiple attributes?
Author: (Deleted User)
Date: 09 Dec 2008 05:10 AM
Hi Alberto,

Could it be that there is a problem with all nl: prefixed elements, since non of these mapped elements gives a result. The location of the prefix namespace (xmlns:nl="http://ns.hr-xml.org/2004-08-02) does not work, is that the problem?

Attached the files:

Invoice.xsd
InvoiceAdditional.xsd
Finentry.xsl
20080121_114332.100167.4529093.10001.982205.12601217.INVOICE


UnknownZipStylus.zip

Postnext
(Deleted User) Subject: Select one of multiple attributes?
Author: (Deleted User)
Date: 09 Dec 2008 06:20 AM
Hi Cynthia,
the problem is not with the "nl" prefix, as its URI must not be a valid URL (it could be any string). The problem is that your XML has two levels of Line elements, and your current code is picking the outermost. That is, you have a Line sibling of Header, that has three children, LineNumber, Charges and Line; it's this last Line element the one that has a UserArea element as its last child.
So, probably you should write a recursive algorithm by having a separate template for Line elements; but in case you know you are always dealing with a two-level structure, you can change your XSL to say

<xsl:for-each select="../a:Line/a:Line">
<FinEntryLine>
<xsl:for-each select="a:UserArea/nl:StaffingAdditionalData/nl:CustomerReportingRequirements">
<Description>
<xsl:choose>
<xsl:when test="nl:AdditionalRequirement/@requirementTitle = 'plaatsingsnummer'">
<xsl:text>plaatsingsnummer exists</xsl:text>
</xsl:when>
<xsl:otherwise>no plaatsingsnummer</xsl:otherwise>
</xsl:choose>
</Description>
</xsl:for-each>


Alberto

Postnext
(Deleted User) Subject: Select one of multiple attributes?
Author: (Deleted User)
Date: 09 Dec 2008 07:33 AM
Hi Alberto,

This indeed helps! Thanks so far. The below construction works:

<FinEntryLine>
<xsl:for-each select="a:UserArea/nl:StaffingAdditionalData/nl:CustomerReportingRequirements">
<Description>
<xsl:choose>
<xsl:when test="nl:AdditionalRequirement/@requirementTitle = 'plaatsingsnummer'">
<xsl:text>plaatsingsnummer exists</xsl:text>
</xsl:when>
<xsl:otherwise>no plaatsingsnummer</xsl:otherwise>
</xsl:choose>
</Description>
</xsl:for-each>
</FinEntryLine>

but if I want to capture the tag value itself it gives no result. Can you help me one more time?

<FinEntryLine>
<xsl:for-each select="a:UserArea/nl:StaffingAdditionalData/nl:CustomerReportingRequirements">
<Description>
<xsl:choose>
<xsl:when test="@requirementTitle = 'plaatsingsnummer'">
<xsl:value-of select="nl:AdditionalRequirement"/>
</xsl:when>
<xsl:otherwise>no plaatsingsnummer</xsl:otherwise>
</xsl:choose>
</Description>
</xsl:for-each>
</FinEntryLine>

Thanks,


Cynthia

Postnext
(Deleted User) Subject: Select one of multiple attributes?
Author: (Deleted User)
Date: 09 Dec 2008 08:44 AM
Hi Cynthia,
in order to test whether there is an additional requirement named "plaatsingsnummer" you need to use the

<xsl:when test="nl:AdditionalRequirement/@requirementTitle = 'plaatsingsnummer'">

The test is true if there is at least one AdditionalRequirement with an attribute requirementTitle having the "plaatsingnummer" value.

Inside that, if you want to extract the text associated with that requirement, you need to use

<xsl:value-of select="nl:AdditionalRequirement[@requirementTitle = 'plaatsingsnummer']"/>

This will isolate the AdditionalRequirement elements with the desired requirementTitle, and print its text content.

Alberto

Postnext
(Deleted User) Subject: Select one of multiple attributes?
Author: (Deleted User)
Date: 09 Dec 2008 02:36 PM
Hi Alberto,

Changed the for each a little bit and now it is working if I not use a value of select, but just print a text in the when clause, for instance "plaatsingsnummer". I then correctly get three times "no plaatsingsnummer" and 1 time "plaatsingsnummer". The value of select is still not working though, does it have to do something with the fact that I am already inside the "nl:AdditionalRequirement" tag and I should only select the attribute itself?

<xsl:for-each select="a:UserArea/nl:StaffingAdditionalData/nl:CustomerReportingRequirements/nl:AdditionalRequirement">
<Description>
<xsl:choose>
<xsl:when test="@requirementTitle = 'plaatsingsnummer'">
<xsl:value-of select="nl:AdditionalRequirement[@requirementTitle = 'plaatsingsnummer']"/>
</xsl:when>
<xsl:otherwise>no plaatsingsnummer</xsl:otherwise>
</xsl:choose>
</Description>
</xsl:for-each>
</FinEntryLine>
</xsl:for-each>

Thanks,


Cynthia

Postnext
(Deleted User) Subject: Select one of multiple attributes?
Author: (Deleted User)
Date: 09 Dec 2008 03:46 PM
Cynthia,
the for-each instruction selects the node identified by its XPath expression as the current node; so, the value-of located inside its scope must not re-navigate to locate it, and can just be <xsl:value-of select="text()"/> (as the filtering was done by the parent xsl:when instruction).

Alberto

Postnext
(Deleted User) Subject: Select one of multiple attributes?
Author: (Deleted User)
Date: 09 Dec 2008 04:50 PM
Hi Alberto,

I am still progressing, I now moved on to an error about not finding a scema it wants to include. Error text:

---------------------------
Stylus Studio 2008 XML Enterprise Suite Release 2
---------------------------
Error: at xsd:include on line 17 of file:///e:/Klanten/SROL/VOORBE%7E1/InvoiceAdditionalNL.xsd:

Failed to process included schema document ../StaffingOrganization.xsd


URL: file:///e:/Klanten/SROL/VoorbeeldFactuur/20080121_114332.100167.4529093.10001.982205.12601217.INVOICE.xml
Line:15
Col: 38
Jump to location?
---------------------------
Yes No
---------------------------

Now I think I should place the StaffingOrganization.xsd one directory up from the location of InvoiceAdditionalNL.xsd, but it doesn't resolve the error. Could it be because this new schema (StaffingOrganization.xsd) is including itself a few new schema's as well?

Can you help me again? Thanks,


Cynthia

Postnext
(Deleted User) Subject: Select one of multiple attributes?
Author: (Deleted User)
Date: 12 Dec 2008 05:58 AM
Cynthia,
the zip file you provided was already missing a couple of schemas, so I cannot tell which ones you need to fully construct them. You will have to follow the error messages in telling what is missing and where it expects them to be located.

Alberto

Posttop
(Deleted User) Subject: Select one of multiple attributes?
Author: (Deleted User)
Date: 12 Dec 2008 06:15 AM
Hi Alberto,

I fixed this issue by copying the elements from the separate schema's to the main schema.

Thanks for all you help, appreciate it very much!

Cynthia

 
Topic Page 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.