Nathan, Thanks so much for the insights; not quite there yet in my understanding... First things first - xalan-j-users list protocol: It appears my deficiency relates to general XSLT knowledge. Is it appropriate to copy the list on any follow-up questions here, even though they may not directly relate to xalan? I'm doing so this time under the presumption the answer is "Yes", but I also don't want to pollute inboxes with chaff. On the other hand, I want to ensure that those who might benefit from the exchange can do so. Second, with changes you implied in your response, I tried several variations. I'm still missing something, probably elemental, of importance. Additional guidance would be most welcome... I now have the following, representative of all the variations I tried:
XML: (no change) XSL: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.fedex.com/schemas/freightRateQuotation"> <xsl:template match="/"> <html> <body> <xsl:apply-templates select="To" /> </body> </html> </xsl:template> <xsl:template match="To"> To: <xsl:value-of select="."/> </xsl:template> </xsl:stylesheet> Actual Result: <?xml version="1.0" encoding="UTF-8"?><html xmlns="http://www.fedex.com/schemas/freightRateQuotation"><body/></html> Logging information (from "Debugger Interface": file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #3, Column #26: template match='/' STARTDOCUMENT file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #4, Column #9: html STARTELEMENT: html file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #5, Column #10: body file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #6, Column #41: apply-templates Selected source node '#document' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #6, Column #41: apply-templates, select='null': [empty node list] STARTELEMENT: body ENDELEMENT: body ENDELEMENT: html ENDDOCUMENT Thanks in advance for the consideration and attention. Tim Hibbs FedEx Services 350 Spectrum Loop Colorado Springs, CO 80921 719-484-2131 ________________________________ From: Nathan Nadeau [mailto:n...@gleim.com] Sent: Wednesday, February 17, 2010 10:16 AM To: Tim Hibbs Cc: xalan-j-users@xml.apache.org Subject: Re: Output from node traversal not processing correctly Tim, What's happening is you're triggering the default templates that are provided by the XSLT processor that match element and text nodes when you call <xsl:apply-templates/>. There are built in rules provided by the XSLT processor that match the different node types. The default rule for element nodes is to simply call <xsl:apply-templates/> again on its children nodes. The default rule for a text node is to print out the text to the output. So when you call <xsl:apply-templates/> in your XSL, it's actually matching all the nodes, not just the <To> element, and it's firing the default template for everything but the <To> element, which fires the more specific template that matches the <To> element. This has the effect of printing out out all the text of each of the elements. And actually it looks like it might not be matching the <To> element either, because it has a namespace in the source XML document that you're not specifying in your XSL. Your namespaces need to match between your XSL and your input XML document, otherwise the processor will not match it. Nathan Nadeau Tim Hibbs wrote: Hi - I'm requesting some basic assistance with an XSL processing problem. I would think this is a simple issue to resolve, but I haven't had much luck. Any asistance would be greatly appreciated. Issue: Node contents not being output as expected. Execution Context: - eclipse 3.5.1, running a 2.x EJB on a local Weblogic 10.3 server, using Java JRE jdk16.0_17 - using eclipse Java EE Developer Tools, Oracle Weblogic Server Tools, Oracle Common Tools - CLASSPATH overridden to force xalan.jar, xml-apis.jar, serializer.jar, and xercesImpl.jar before weblogic.jar - to allow instantiation of a proper TransformerFactory (not Weblogic's version) and use of the "debugger Interface" (http://xml.apache.org/xalan-j/usagepatterns.html#debugging) - Xalan-j_2_7_1 - Input is a DOMSource, wrapping an org.w3c.dom.Document. - Relevant code: aTransformer.transform(aDOMSource, new StreamResult(aFileOutputStream)); "aTransformer" is instanceof TransformerImpl Personal Context: - New to XSL, Xalan. Have taken care to try all options I can think of before soliciting for assistance here. Don't fully understand Debugger outputs (below). Anticipated Result: <?xml version="1.0" encoding="UTF-8"?> <html> <body> To: John Customer </body> </html> Actual Result: <?xml version="1.0" encoding="UTF-8"?><html> <body>Customer Company123 Main StreetAnytownCO80134USJohn CustomerFedex02/02/1012:01:003031234567john.custo...@customerco.com1 12345678Salt Lake CityUT84106US</body> </html> XML: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <tFreightRateQuotation xmlns="http://www.fedex.com/schemas/freightRateQuotation"> <AccountInformation> <CompanyName>Customer Company</CompanyName> <Address1>123 Main Street</Address1> <City>Anytown</City> <State>CO</State> <Postal>80134</Postal> <Country>US</Country> </AccountInformation> <CommonData> <To>John Customer</To> <From>Fedex</From> <HeaderDate>02/02/10</HeaderDate> <HeaderTime>12:01:00</HeaderTime> <FaxNumber>3031234567</FaxNumber> <EmailAddress>john.custo...@customerco.com</EmailAddress> </CommonData> <RateQuote> <QuoteNumber>1 12345678</QuoteNumber> <OriginAddress> <OriginCity>Salt Lake City</OriginCity> <OriginState>UT</OriginState> <OriginPostal>84106</OriginPostal> <OriginCountry>US</OriginCountry> </OriginAddress> </RateQuote> </tFreightRateQuotation> XSL: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <xsl:apply-templates /> </body> </html> </xsl:template> <xsl:template match="To"> To: <xsl:value-of select="."/> <xsl:apply-templates/> </xsl:template> </xsl:stylesheet> Logging information (from "Debugger Interface", http://xml.apache.org/xalan-j/usagepatterns.html#debugging <http://xml.apache.org/xalan-j/usagepatterns.html#debugging> ): file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #3, Column #26: template match='/' STARTDOCUMENT file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #4, Column #9: html STARTDOCUMENT STARTELEMENT: html file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #5, Column #10: body file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #6, Column #29: apply-templates Selected source node '#document' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #6, Column #29: apply-templates, select='null': 10001: tFreightRateQuotation null Line #0, Column #0: template match='*' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #0, Column #0: apply-templates Selected source node 'tFreightRateQuotation' (default rule) apply-templates, select='null': 10004: AccountInformation 10011: CommonData 1001e: RateQuote null Line #0, Column #0: template match='*' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #0, Column #0: apply-templates Selected source node 'AccountInformation' (default rule) apply-templates, select='null': 10005: CompanyName 10007: Address1 10009: City 1000b: State 1000d: Postal 1000f: Country null Line #0, Column #0: template match='*' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #0, Column #0: apply-templates Selected source node 'CompanyName' (default rule) apply-templates, select='null': 10006: #text STARTELEMENT: body CHARACTERS: Customer Company null Line #0, Column #0: template match='*' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #0, Column #0: apply-templates Selected source node 'Address1' (default rule) apply-templates, select='null': 10008: #text CHARACTERS: 123 Main Street null Line #0, Column #0: template match='*' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #0, Column #0: apply-templates Selected source node 'City' (default rule) apply-templates, select='null': 1000a: #text CHARACTERS: Anytown null Line #0, Column #0: template match='*' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #0, Column #0: apply-templates Selected source node 'State' (default rule) apply-templates, select='null': 1000c: #text CHARACTERS: CO null Line #0, Column #0: template match='*' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #0, Column #0: apply-templates Selected source node 'Postal' (default rule) apply-templates, select='null': 1000e: #text CHARACTERS: 80134 null Line #0, Column #0: template match='*' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #0, Column #0: apply-templates Selected source node 'Country' (default rule) apply-templates, select='null': 10010: #text CHARACTERS: US null Line #0, Column #0: template match='*' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #0, Column #0: apply-templates Selected source node 'CommonData' (default rule) apply-templates, select='null': 10012: To 10014: From 10016: HeaderDate 10018: HeaderTime 1001a: FaxNumber 1001c: EmailAddress null Line #0, Column #0: template match='*' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #0, Column #0: apply-templates Selected source node 'To' (default rule) apply-templates, select='null': 10013: #text CHARACTERS: John Customer null Line #0, Column #0: template match='*' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #0, Column #0: apply-templates Selected source node 'From' (default rule) apply-templates, select='null': 10015: #text CHARACTERS: Fedex null Line #0, Column #0: template match='*' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #0, Column #0: apply-templates Selected source node 'HeaderDate' (default rule) apply-templates, select='null': 10017: #text CHARACTERS: 02/02/10 null Line #0, Column #0: template match='*' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #0, Column #0: apply-templates Selected source node 'HeaderTime' (default rule) apply-templates, select='null': 10019: #text CHARACTERS: 12:01:00 null Line #0, Column #0: template match='*' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #0, Column #0: apply-templates Selected source node 'FaxNumber' (default rule) apply-templates, select='null': 1001b: #text CHARACTERS: 3031234567 null Line #0, Column #0: template match='*' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #0, Column #0: apply-templates Selected source node 'EmailAddress' (default rule) apply-templates, select='null': 1001d: #text CHARACTERS: john.custo...@customerco.com null Line #0, Column #0: template match='*' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #0, Column #0: apply-templates Selected source node 'RateQuote' (default rule) apply-templates, select='null': 1001f: QuoteNumber 10021: OriginAddress null Line #0, Column #0: template match='*' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #0, Column #0: apply-templates Selected source node 'QuoteNumber' (default rule) apply-templates, select='null': 10020: #text CHARACTERS: 1 12345678 null Line #0, Column #0: template match='*' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #0, Column #0: apply-templates Selected source node 'OriginAddress' (default rule) apply-templates, select='null': 10022: OriginCity 10024: OriginState 10026: OriginPostal 10028: OriginCountry null Line #0, Column #0: template match='*' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #0, Column #0: apply-templates Selected source node 'OriginCity' (default rule) apply-templates, select='null': 10023: #text CHARACTERS: Salt Lake City null Line #0, Column #0: template match='*' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #0, Column #0: apply-templates Selected source node 'OriginState' (default rule) apply-templates, select='null': 10025: #text CHARACTERS: UT null Line #0, Column #0: template match='*' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #0, Column #0: apply-templates Selected source node 'OriginPostal' (default rule) apply-templates, select='null': 10027: #text CHARACTERS: 84106 null Line #0, Column #0: template match='*' file:///D:/workspaces/3.5/2010-June-load/1SRC_FAX/FaxEjb/XML/rateQuoteXm lToPdf-FO.xsl Line #0, Column #0: apply-templates Selected source node 'OriginCountry' (default rule) apply-templates, select='null': 10029: #text CHARACTERS: US ENDELEMENT: body ENDELEMENT: html ENDDOCUMENT Observations: - Nodes seem to be traversed properly. - Line # and Column # don't increment after initial apply-templates Thanks in advance for your insights! Tim Hibbs FedEx Services 350 Spectrum Loop Colorado Springs, CO 80921 719-484-2131 -- Nathan Nadeau n...@gleim.com Software Development Gleim Publications, Inc. http://www.gleim.com