July 24, 2013 at 6:02 pm
Hi, I am upgrading reports from 2005 to 2008R2 and I noticed that two reports are failing on the new server. So, after looking up its issue, I realized that I might need to rewrite XSL that was formatting the XML output/render...
So, my scenario is as such:
the report renders xml with root node <Report blah blah bla> and then it renders my xml, with its own root like I need it. So it's kinda double wrapped, it's still full and proper xml after the render.
I got to the point where I get <?xml version="1.0"?> at the top of the rendered file, and then I have that <Report blah name blah> root that I have to remove... It's pretty confusing, spent all day searching for an answer.
How do I go about removing the first line and the <Report....> root from final rendered results?
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" encoding="ascii" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
I'd appreciate some help here.
July 25, 2013 at 1:27 am
Have you got an example before/after xml that you can post as that may help
July 25, 2013 at 9:10 am
Yes, I can
Current Result:
<?xml version="1.0"?>
-<Report xmlns="test_3">
test_3
<Document>
<Assessments>
<Assessment>
<Date>05/01/2013</Date>
<Type>Physical</Type>
<Completed>1</Completed>
</Assessment>
<Assessment>
<Date>06/14/2013</Date>
<Type>Physical</Type>
<Completed>0</Completed>
</Assessment>
</Assessments>
</Document>
</Report>
Wanted result:
<Document>
<Assessments>
<Assessment>
<Date>05/01/2013</Date>
<Type>Physical</Type>
<Completed>1</Completed>
</Assessment>
<Assessment>
<Date>06/14/2013</Date>
<Type>Physical</Type>
<Completed>0</Completed>
</Assessment>
</Assessments>
</Document>
July 25, 2013 at 9:47 am
I'm not very good at XSL myself, but does this get you what you need?
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="test_3">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:copy><xsl:apply-templates select="/a:Report/a:Document"/></xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name(.)}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
July 25, 2013 at 9:56 am
Unfortunately it's exactly the same thing as before. But thanks for trying 🙂
July 25, 2013 at 10:01 am
danka_6786978 (7/25/2013)
Unfortunately it's exactly the same thing as before. But thanks for trying 🙂
That's odd then.. When i pass your "Current Result" xml example through that style sheet, it outputs in the format of your "Wanted Result" xml...
Like I say, i'm not an XSL expert so not sure to be honest..
July 25, 2013 at 12:48 pm
I re-ran it, I think I made a mistake when copying the xsl from her, sorry ... So, now that I corrected it, I only get an error: "XML document must have a top level element. Error processing resource file:...."
September 30, 2013 at 5:40 am
thx a lot for this information
October 8, 2013 at 4:26 pm
danka_6786978 (7/24/2013)
Hi, I am upgrading reports from 2005 to 2008R2 and I noticed that two reports are failing on the new server. So, after looking up its issue, I realized that I might need to rewrite XSL that was formatting the XML output/render...So, my scenario is as such:
the report renders xml with root node <Report blah blah bla> and then it renders my xml, with its own root like I need it. So it's kinda double wrapped, it's still full and proper xml after the render.
I got to the point where I get <?xml version="1.0"?> at the top of the rendered file, and then I have that <Report blah name blah> root that I have to remove... It's pretty confusing, spent all day searching for an answer.
How do I go about removing the first line and the <Report....> root from final rendered results?
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" encoding="ascii" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
I'd appreciate some help here.
I know I am a little late here but... You were close, you just needed to change the context in you template match statement to begin at Report.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" encoding="ascii" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="Report/@* | Report/node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
-- Itzik Ben-Gan 2001
Viewing 9 posts - 1 through 8 (of 8 total)
You must be logged in to reply to this topic. Login to reply