473,385 Members | 1,569 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,385 software developers and data experts.

XSLT output missing XML elements

I'm using JAXP for XSLT - I'm using the examples from
http://www.w3.org/TR/xslt#section-Examples. I'm using the following XML
file:

<?xml version="1.0" encoding="UTF-8"?>
<sales>

<division id="North">
<revenue>10</revenue>
<growth>9</growth>
<bonus>7</bonus>
</division>

<division id="South">
<revenue>4</revenue>
<growth>3</growth>
<bonus>4</bonus>
</division>

<division id="West">
<revenue>6</revenue>
<growth>-1.5</growth>
<bonus>2</bonus>
</division>

</sales>

and the following XSL file:

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

xmlns="http://www.w3.org/Graphics/SVG/SVG-19990812.dtd">

<xsl:output method="xml" indent="yes" media-type="image/svg"/>

<xsl:template match="/">

<svg width = "3in" height="3in">
<g style = "stroke: #000000">
<!-- draw the axes -->
<line x1="0" x2="150" y1="150" y2="150"/>
<line x1="0" x2="0" y1="0" y2="150"/>
<text x="0" y="10">Revenue</text>
<text x="150" y="165">Division</text>
<xsl:for-each select="sales/division">
<!-- define some useful variables -->

<!-- the bar's x position -->
<xsl:variable name="pos"
select="(position()*40)-30"/>

<!-- the bar's height -->
<xsl:variable name="height"
select="revenue*10"/>

<!-- the rectangle -->
<rect x="{$pos}" y="{150-$height}"
width="20" height="{$height}"/>

<!-- the text label -->
<text x="{$pos}" y="165">
<xsl:value-of select="@id"/>
</text>

<!-- the bar value -->
<text x="{$pos}" y="{145-$height}">
<xsl:value-of select="revenue"/>
</text>
</xsl:for-each>
</g>
</svg>

</xsl:template>
</xsl:stylesheet>

The result of running the JAXP code is:

<?xml version="1.0" encoding="UTF-8"?>

10
9
7

4
3
4

6
-1.5
2
and is missing the XML elements within the result. The JAXP code that
I'm using is the following:

// Create the tranformation object
TransformerFactory factory = TransformerFactory.newInstance();
StreamSource xslSource = new StreamSource(xslFile);
xslSource.setSystemId(xslFile);
Templates template = factory.newTemplates(xslSource);

// Set the source that the tranformation will be
performed on
Source source = new DOMSource(xmlInput);

// Create a output stream to hold the results
StreamResult result = new StreamResult(output);

// Transform the document
Transformer transformer = template.newTransformer();
transformer.transform(source, result);

Does anyone have any idea as to why the XML elements are not being
output? Thanks in advance.

Feb 14 '06 #1
7 3504
xsl:value-of copies only the text content of the node. You probably
wanted xsl:copy-of.
Feb 14 '06 #2
The problem is that the XSL is correct - I took it directly from the
XSLT w3c web site. The result of the transformation should look like
this:

<svg width="3in" height="3in"
xmlns="http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
<g style="stroke: #000000">
<line x1="0" x2="150" y1="150" y2="150"/>
<line x1="0" x2="0" y1="0" y2="150"/>
<text x="0" y="10">Revenue</text>
<text x="150" y="165">Division</text>
<rect x="10" y="50" width="20" height="100"/>
<text x="10" y="165">North</text>
<text x="10" y="45">10</text>
<rect x="50" y="110" width="20" height="40"/>
<text x="50" y="165">South</text>
<text x="50" y="105">4</text>
<rect x="90" y="90" width="20" height="60"/>
<text x="90" y="165">West</text>
<text x="90" y="85">6</text>
</g>
</svg>

However when I use the JAXP code above I get the output that I
specified.

Feb 14 '06 #3
OK, that's what I get for shooting from the hip rather than stopping to
check it in detail.

Ran it myself, using Xalan via the TrAX API, and it runs fine.

So the next question is, what are you doing with the output? It sounds
as if you're running it through something which is discarding all the
element markup.
Here's a trivial TrAX wrapper; try this and see what it does for you.

import java.io.FileNotFoundException;
public class TrAX {

/**
* @param args
*/
public static void main(String[] args) throws FileNotFoundException
{
String xsl=(args.length>0) ? args[0] : "test.xsl";
String xml=(args.length>1) ? args[1] : "test.xml";
java.io.PrintStream out=(args.length>2)
? new java.io.PrintStream("test.out")
: System.out;

try {
// 1. Instantiate a TransformerFactory.
javax.xml.transform.TransformerFactory tFactory =
javax.xml.transform.TransformerFactory.newInstance ();

// 2. Use the TransformerFactory to process the
// stylesheet Source and generate a Transformer.
javax.xml.transform.Transformer transformer =
tFactory.newTransformer(
new javax.xml.transform.stream.StreamSource(xsl)
);

// 3. Use the Transformer to transform an
// XML Source and send the output to a Result.
transformer.transform(
new javax.xml.transform.stream.StreamSource(xml),
new javax.xml.transform.stream.StreamResult(out)
);
} catch (Exception e) {
e.printStackTrace();
}
}

}

}
Feb 14 '06 #4
> Source source = new DOMSource(xmlInput);

You didn't tell us what xmlInput is -- specifically, what the
implementation is and how it's being constructed.

(Are you using the obsolete createElement(), createAttribute(),
setAttribute() calls rather than the namespace-aware createElementNS(),
createAttributeNS(), setAttributeNS()?)
StreamResult result = new StreamResult(output);


You didn't tell us what output is. It may be doing something to the
result before you see it.

--
() ASCII Ribbon Campaign | Joe Kesselman
/\ Stamp out HTML e-mail! | System architexture and kinetic poetry
Feb 14 '06 #5
Yep - sorry just saw that. The xmlInput is constructed outside of the
method specified above in the following manner:
DocumentBuilder builder = getDocumentBuilder();
// Parser the input source
Document doc = builder.parse(new FileInputStream(EXAMPLE1_XML));

Node example1DocRoot = example1Doc.getDocumentElement();
The example1DocRoot is the xmlInput.

The output is constructed outside of the method in the following
manner:
FileOutputStream fos = new FileOutputStream(EXAMPLE1_RESULT);


In the simple example that I constructed above I don't make any of the
API calls that you specified (createElement(), createAttribute(),
.....). Let me know what else I can provide - I really appreciate the
help. I spent the better part of today trying to find info on why the
transformation isn't working correctly. I also forgot to mention that
the version of Xalan that is being used is 2.6.5.

Additionally I will try the code you posted above.

Feb 14 '06 #6
I just tried your code and it appears that it's a problem with using a
DOMSource vs. a StreamSource. I'm going to have to research why that is.

Feb 14 '06 #7
mjarends wrote:
xmlns="http://www.w3.org/Graphics/SVG/SVG-19990812.dtd"
Change the SVG namespace to xmlns="http://www.w3.org/2000/svg".
<xsl:output method="xml" indent="yes" media-type="image/svg"/>
The correct MIME type is "image/svg+xml".
<xsl:template match="/">


The rest works for me.

cu, Thomas
--
SVG - Learning By Coding
<http://svglbc.datenverdrahten.de/>
Feb 14 '06 #8

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

6
by: Pete | last post by:
I am just getting to grips with XML and I was wondering if you could help me with something that no-one seems able or willing to help with.. I have an XSLT file which should be transforming a...
2
by: Taare | last post by:
Hi, I got <xsl:output method="html" encoding="iso-8859-1" doctype-public="-//W3C//DTD HTML 4.01//EN" doctype-system=" http://www.w3.org/TR/html4/strict.dtd"/> in my XSLT file. This should remove...
4
by: Chris Kettenbach | last post by:
Hi Peter, I get error when processing the stylesheet. It errors here. <xsl:for-each select="registration)=1]"> specifically: Expression does not return a DOM node. registration)=1]<--
5
by: dennis | last post by:
Hi, First of all, hi to you all. I'm working on a Delphi project wich is becoming near it's deadline. I have a very simple XSLT question wich i hope one of you folks can help me with? The...
7
by: Harolds | last post by:
The code below worked in VS 2003 & dotnet framework 1.1 but now in VS 2005 the pmID is evaluated to "" instead of what the value is set to: .... xmlItems.Document = pmXML // Add the pmID...
4
by: Lord0 | last post by:
Hi there, Is the following possible with XSLT? Given the following example XML docs: <!-- doc 1--> <user> <username>myUsername</username> <password></password> <phone>12345</phone>
3
by: super.raddish | last post by:
Greetings, I am relatively new to, what I would call, advanced XSLT/XPath and I am after some advice from those in the know. I am attempting to figure out a mechanism within XSLT to compare the...
11
by: =?ISO-8859-1?Q?Jean=2DFran=E7ois_Michaud?= | last post by:
Context: I'm trying to compare XML tree fragments and I'm doing so by outputting the attributes of each element in the tree and outputting it to a string then normalizing the strings. Then I'm...
6
by: John Larson | last post by:
Hi All, I am some information from INSPEC database records in XML to build a relational database of my own. I am currently trying to extract information by doing an XSLT transform of the XML...
1
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
0
by: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.