[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Identifying unique attribute values in nested s
Ken,
Thanks, You are quite right: my problem is that I am a very good C++ programmer but a very mediocre (if not incompetent) XPath programmer. I have a great deal of difficulty explaining what I want to do in terms of nodes (because I do tend to think in terms of C++ strings rather than nodes). My stylesheet produces an XHTML page for every <Stamp> element within a <Set> and a different kind of XHMTL page for each of the <Formats> elements. The source XML is quite complicated and the construction of the <Formats> XHTML pages are not straight-forward. Information for each (there are five additional formats beyond the "se-tenant" one) must be gathered across different <Stamp> lines within a <Set>. These scenarios change slightly for each type of <Formats> element. I can now see that if I work with nodes, life would be simpler. I'll try to work with and understand your code. It would be very liberating for me to be able to grasp nodes as the preferred computational form. Thank you for your kindness in explaining why I am having a problem. You have always been most helpful and insightful -- I have never seen your comments as anything but that. Mark -----Original Message----- From: G. Ken Holman Sent: Thursday, September 29, 2011 11:52 AM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: Re: Identifying unique attribute values in nested sibling elements At 2011-09-29 11:37 -0700, Mark wrote: ... Apparently you don't want strings, you now say you want nodes. My problem: I now need to tokenize these strings (or break them into usable substrings) so that I can produce the output XHTML .
I only need to pay attention to the digits on the left of '=' and the unit-name (kc-value, h-value) on its right. The substring (token) separator is ';'
I just don't see why you are doing the heavy lifting of going to a string just to get more heavy lifting of going back to nodes. I suggest you stick with the nodes. Not only are you not making extra work for yourself, but there is now no opportunity to introduce bugs or worry about accidental lexical duplications in the strings triggering unexpected regex results. I hope this helps. . . . . . . . . . . Ken p.s. please forgive me if the above sounds critical, I'm not intending it as such, I'm just asking the questions aloud so that you can see the benefit of avoiding the unneeded processing you are introducing p.p.s. note that I've seen such kinds of elaborate string-based solutions in the classroom from students who are programmers used to dealing with strings ... when working with XML it is sometimes (most times?) far easier to work with nodes and not strings, and getting that across to the students is an important learning outcome of the class ~/t/ftemp $ xslt2 mark.xml mark.xsl <?xml version="1.0" encoding="UTF-8"?><html> <head>Mark's test</head> <body> <a href="../aval/14.htm">14kc</a> <a href="../aval/18.htm">18kc</a> <a href="../aval/18.htm">18kc</a> <a href="../aval/0.htm">0kc</a> </body> </html>~/t/ftemp $ cat mark.xsl <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:m="urn:X-Mark" exclude-result-prefixes="m" version="2.0"> <xsl:output method="xhtml"/> <!--compose a string of attribute names and their values; avoid the possibility of co-incidental string values;--> <xsl:function name="m:attrs"> <xsl:param name="this"/> <xsl:value-of> <xsl:for-each select="$this/@*"> <xsl:sort select="name(.)"/> <xsl:value-of select="name(.),'',.,''"/> </xsl:for-each> </xsl:value-of> </xsl:function> <!--common reporting--> <xsl:function name="m:report"> <xsl:param name="Stamp"/> <xsl:for-each select="$Stamp"> <xsl:for-each select="Value/@kc-value"> <a href="../aval/{.}.htm"> <xsl:value-of select="."/>kc<xsl:text/> </a> </xsl:for-each> </xsl:for-each> </xsl:function> <xsl:template match="/"> <html> <head>Mark's test</head> <body> <xsl:for-each-group select="Stamp[Formats/@se-tenant=1]" group-by="m:attrs(Value)"> <xsl:copy-of select="m:report(.)"/> </xsl:for-each-group> </body> </html> </xsl:template> </xsl:stylesheet> ~/t/ftemp $ cat mark.xml <?xml version="1.0" encoding="UTF-8"?> <Set> <!--possibly other unrelated <Stamp> elements here--> <Stamp> <CatNumbers pofis-number="1"/> <Value kc-value="14"/> <Formats se-tenant="1"/> </Stamp> <!--possibly other unrelated <Stamp> elements here--> <Stamp> <CatNumbers pofis-number="2"/> <Value kc-value="18"/> <Formats se-tenant="1"/> </Stamp> ..... <!--possibly other unrelated stamp elements--> <Stamp> <CatNumbers pofis-number="3"/> <Value kc-value="18" h-value="50"/> <Formats se-tenant="1"/> </Stamp> <!--possibly other unrelated <Stamp> elements here--> <Stamp> <CatNumbers pofis-number="4"/> <Value kc-value="14" /> <Formats se-tenant="1"/> </Stamp> <!--possibly other unrelated <Stamp> elements here--> <Stamp> <CatNumbers pofis-number="5"/> <Value kc-value="0" l-value="A" /> <Formats se-tenant="1"/> </Stamp> </Set> ~/t/ftemp $
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|