Sign In/My Account | View Cart  
advertisement

Article:
 Controlling Whitespace, Part 1
Subject: please suggest a solution...problem with white space in node
Date: 2007-08-08 19:08:13
From: vpsreejith1

input XML
<?xml version="1.0" eitemoding="UTF-8"?>
<!--
Example of payload body for World CUD transaction v 0.1
-->
<object type="Sony World SO" root="yes" action="Update" name="Test World" id="World FNN Value" item_id="23421354325432">
<property name="World FNN" item_id="89237498237" action="Update">
<value>ACDAF89127349812</value>
<old_value>itemSWHFC1982743982</old_value>
</property>
<property name="Sony World Name" item_id="12324545" action="Update">
<value>Honda motors</value>
<old_value>Honda</old_value>
</property>
<property name="Sony World Number Range" item_id="8763245" action="Update">
<value>13123123-14381283</value>
<old_value>123213123-124758789</old_value>
</property>
<property name="Customer Domain Names" item_id="87463298764" action="Update">
<value>honda.com.au</value>
<old_value>honda.com</old_value>
</property>
<property name="Zone Name" item_id="76524532846" action="Update">
<value>com.au</value>
<old_value>com</old_value>
</property>
<property name="Zone Primary Interface" item_id="89632876R8723" action="Update">
<value>eth0</value>
<old_value>eth1</old_value>
</property>
<property name="Zone Primary Interface" item_id="87634876327" action="Update">
<value>eth1</value>
<old_value>eth2</old_value>
</property>
<property name="CE to Zone Route IP Address" item_id="13242345235" action="Update">
<value>192.168.3.3</value>
<old_value>192.123.3.3</old_value>
</property>
<property name="Zone IP Address" item_id="345324132" action="Update">
<value>12.12.12.12</value>
<old_value>12.12.12.11</old_value>
</property>
<property name="Zone Network IP Address" item_id="32424555555" action="Update">
<value>12.12.12.10</value>
<old_value>12.12.12.13</old_value>
</property>
<property name="Zone IP Netmask" item_id="234324324" action="Update">
<value>12.12.12.9</value>
<old_value>12.12.12.14</old_value>
</property>
<property name="VLAN Interface IP Address" item_id="2567666543" action="Update">
<value>12.12.12.8</value>
<old_value>12.12.12.15</old_value>
</property>
<property name="VLAN ID" item_id="3254325435" action="Update">
<value>itemC</value>
<old_value>item</old_value>
</property>
<property name="Broadcast IP Address" item_id="3214234324" action="Update">
<value>12.12.12.255</value>
<old_value>12.12.12.254</old_value>
</property>
<property name="Customer SRC NAT Address" item_id="2342342345" action="Update">
<value>12.12.12.2</value>
<old_value>12.12.12.122</old_value>
</property>
<property name="CE Router Interface Address" item_id="2423453244" action="Update">
<value>12.12.12.1</value>
<old_value>12.12.12.19</old_value>
</property>
<property name="Exclusion Status" item_id="2342342344" action="Update">
<value>COMPLETE</value>
<old_value>INPROC</old_value>
</property>
<property name="Default Customer Domain Name" item_id="3265376345" action="Update">
<value>honda.com.au</value>
<old_value>honda.com</old_value>
</property>
<object type="World Administrator CO" root="yes" action="Create" name="World Admin 1" id="World Admin 1" item_id="23421354325432">
<property name="Administrator's Initial Password" item_id="89237498237" action="Create">
<value>G_ERd2342kf</value>
<old_value/>
</property>
<property name="Language" item_id="89237498237" action="Update">
<value>russian</value>
<old_value/>
</property>
<property name="User First Name" item_id="89237498237" action="Update">
<value>Andy</value>
<old_value/>
</property>
<property name="User Last Name" item_id="89237498237" action="Update">
<value>Titeren</value>
<old_value/>
</property>
<property name="Administrator User id" item_id="89237498237" action="Update">
<value>Titeren</value>
<old_value/>
</property>
<property name="Password reset only" item_id="89237498237" action="Update">
<value>1</value>
<old_value/>
</property>
</object>
</object>



----------------------------------------------
XSLT using


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


<xsl:template match = "/">
<xsl:apply-templates/>
</xsl:template>


<xsl:template match = "property">
<xsl:text disable-output-escaping="yes"><</xsl:text>
<xsl:value-of select="@name"/>
<xsl:text disable-output-escaping="yes">></xsl:text>
<xsl:value-of select="value"/>
<xsl:text disable-output-escaping="yes" ></</xsl:text>
<xsl:value-of select="@name"/>
<xsl:text disable-output-escaping="yes"> > </xsl:text>
<xsl:apply-templates select="property" />
</xsl:template>


<xsl:template match ="object">
<xsl:text disable-output-escaping="yes"><</xsl:text>
<xsl:value-of select="@type"/>
<xsl:text disable-output-escaping="yes">></xsl:text>
<xsl:apply-templates select = "property" />
<xsl:apply-templates select = "object" />
<xsl:text disable-output-escaping="yes"></</xsl:text>
<xsl:value-of select ="@type"/>
<xsl:text disable-output-escaping="yes">></xsl:text>
</xsl:template>



</xsl:stylesheet>
___________________________________________



i am getting the output XML as


<?xml version="1.0" eitemoding="UTF-8"?>
<SonyWorldSO>


<World FNN>ACDAF89127349812</World FNN >
<Sony World Name>Honda motors</Sony World Name >
<Sony World Number Range>13123123-14381283</Sony World Number Range >
<Customer Domain Names>honda.com.au</Customer Domain Names >
<Zone Name>com.au</Zone Name >
<Zone Primary Interface>eth0</Zone Primary Interface >
<Zone Primary Interface>eth1</Zone Primary Interface >
<CE to Zone Route IP Address>192.168.3.3</CE to Zone Route IP Address >
<Zone IP Address>12.12.12.12</Zone IP Address >
<Zone Network IP Address>12.12.12.10</Zone Network IP Address >
<Zone IP Netmask>12.12.12.9</Zone IP Netmask >
<VLAN Interface IP Address>12.12.12.8</VLAN Interface IP Address >
<VLAN ID>itemC</VLAN ID >
<Broadcast IP Address>12.12.12.255</Broadcast IP Address >
<Customer SRC NAT Address>12.12.12.2</Customer SRC NAT Address >
<CE Router Interface Address>12.12.12.1</CE Router Interface Address >
<Exclusion Status>COMPLETE</Exclusion Status >
<Default Customer Domain Name>honda.com.au</Default Customer Domain Name >


<World Administrator CO>


<Administrator's Initial Password>G_ERd2342kf</Administrator's Initial Password >
<Language>russian</Language > <User First Name>Andy</User First Name >
<User Last Name>Titeren</User Last Name >
<Administrator User id>Titeren</Administrator User id >
<Password reset only>1</Password reset only >


</World Administrator CO>


</Sony World SO>
-------------------------------------------------
you can see the xml output is not a valid one as there is space inside the same node


like <Sony World SO>
<World Administrator CO>
<World FNN>
<Sony World Name>
<Sony World Number Range>
<Customer Domain Names>


and so on
but as in xml space not allowed inside nodes
it should me
<SonyWorldSO>
<WorldAdministratorCO>
<WorldFNN>
<SonyWorldName>
<SonyWorldNumberRange>
<CustomerDomainNames>


how to change the XSLT to get the output like above.


i tried to solve the issue with
<xsl:strip-space elements="*"> or <xsl:strip-space elements="object">


thanks in advance


Previous Message Previous Message   Next Message Next Message


Titles Only Full Threads Newest First
  • please suggest a solution...problem with white space in node
    2007-08-12 10:58:42 Bob DuCharme [Reply]

    (For questions like this, the XSL-list at http://www.mulberrytech.com/xsl/xsl-list/ is generally the place where XSLT questions will get the quickest answers.)


    You're trying to create elements names from content, and space isn't allowed in element names. The translate function (see http://www.w3.org/TR/1999/REC-xpath-19991116#function-translate) will help you take them out; the following stylesheet (which can use any stylesheet as input) demonstrates how:


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


    <xsl:variable name="s1">this is a test</xsl:variable>


    <xsl:template match="/">
    <xsl:value-of select="translate($s1,' ','')"/>
    </xsl:template>


    </xsl:stylesheet>


    Just about any use of disable-output-escaping is a kludge. You'd be better off creating your elements with the xsl:element element. Then you could have something like
    Bob





Sponsored By: