Re: Transformation Problem
Michael Ludwig <[email protected]>
| Newsgroups | gmane.text.xml.xalan.java.user |
|---|---|
| Message-ID | <20090429230302.GA1308@wladimir> |
NOEL ALEX MAKUMULI schrieb am 29.04.2009 um 01:45:03 (+0300):
>
> hello Michael,
> thanks for the quick and nice suggestions..
Hi Noel,
you're welcome.
> well i have to say that the issue which you have pointed out is the
> nine namespaces which some have no use..i asked the same question..
>
> the issue which i am trying to achieve is to get the individual string
> value like status and language code..
>
> if i remember correctly when i was doing transformation from one XMlL
> format to another XML format....like shown below:
> <Root>
> <child>child</child>
> </Root>
> the XSL transformation is pretty easy: <xsl:value-of
> select="/Root/child"> and will get the output child---
<xsl:value-of> gets the string value; <xsl:copy-of> copies the node.
> the issue is that the SOAP which comes has a lot of information which
> i really do not need... and i would like to use XSL to filter this
> information and remain with the few data which i would use..
Start out with the so-called "identity transform":
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
As step 1, run the transform, and look at the result to see the effect.
Then add the following rules one by one and repeat step 1 each time
around.
Add parsing and serialization instructions to get clean input and
output:
<xsl:strip-space elements="*"/><!-- for parsing -->
<xsl:output indent="yes"/><!-- for serialization -->
Replace the document element:
<xsl:template match="/*"><!-- document element -->
<Root>
<xsl:apply-templates select="*"/>
</Root>
</xsl:template>
Replace the cmn:state element, and here, you need to add the namespace
to the stylesheet, and if you don't want it in the output, then you
exclude it:
<xsl:stylesheet version="1.0"
xmlns:cmn="http://www.companyName.com/XMLSchema/compMain.xsd"
exclude-result-prefixes="cmn"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="cmn:state">
<child><xsl:apply-templates/></child>
</xsl:template>
Final touch, add a rule to filter out everything else:
<xsl:template match="*" priority="-0.4">
<xsl:apply-templates select="*"/>
</xsl:template>
> :-) i am not an expert in XSL and XML ...
> when i said normal XML file i meant the one which has root doctype..
>
> i have tried the <xsl:copy-of> and this is the sample result::
> <soap_message><cmn:responseStatus
> xmlns:fs="http://www.asiakastieto.fi/XMLSchema/FinancialStatementCompany_4.03.xsd"
> xmlns:pr="http://www.asiakastieto.fi/XMLSchema/PopulationInformation_4.00.xsd">
> 1</cmn:responseStatus></soap_message>
>
> is there any possible way to remove the namesapces here and have
> something clean like::
> <Root>
>
> <child>child</child>
>
> </Root>
See above.
> i am certainly heading to Mulberrytech.com ..
>
> could you please suggest some nice readings of XSL and XSL
> namespaces..because i would like to learn more about this now..
Namespaces are just a mapping from prefixes to URIs (well, strings).
Not much to say. For XSLT, there are good sites and books:
* http://www.jenitennison.com/
* http://www.dpawson.co.uk/xsl/
* books by Jeni Tennison, Michael Kay, Evan Lenz, others
I hope this helps :-)
Michael Ludwig