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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.