 |
| XSLT General questions and answers about XSLT. For issues strictly specific to the book XSLT 1.1 Programmers Reference, please post to that forum instead. |
Welcome to the p2p.wrox.com Forums.
You are currently viewing the XSLT section of the Wrox Programmer to Programmer discussions. This is a community of software programmers and website developers including Wrox book authors and readers. New member registration was closed in 2019. New posts were shut off and the site was archived into this static format as of October 1, 2020. If you require technical support for a Wrox book please contact http://hub.wiley.com
|
|
|
|

March 10th, 2009, 11:36 PM
|
|
Authorized User
|
|
Join Date: Mar 2009
Posts: 13
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
How to strip out CDATA from xml with XSLT
How to strip out CDATA (marked in pink color) from xml document so the output should not include<![CDATA[]] and my xml input is:
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="soap2.xsl"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<soap:Header>
<wsa:Action>http://www.sampleproject.com/webservice/BusinessServices/CreateWorkspaceResponse</wsa:Action>
<wsa:MessageID>uuid:59e55139-1062-4f42-8509-d9218d76daeb</wsa:MessageID>
<wsa:RelatesTo>uuid:2af90059-eb06-4762-8de8-c8ea72b0fc70</wsa:RelatesTo>
<wsa:To>http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous</wsa:To>
<wsse:Security>
<wsu:Timestamp wsu:Id="Timestamp-4e49cb36-9397-43a0-b62e-ddb2098abd43">
<wsu:Created>2009-02-28T00:17:01Z</wsu:Created>
<wsu:Expires>2009-02-28T00:22:01Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</soap:Header>
<soap:Body>
<CreateWorkspaceResponse xmlns="http://www.sampleproject.com/webservice/BusinessServices">
<CreateWorkspaceResult>
<![CDATA[<ep:Response xmlns:ep="www.sampleproject.com/response" success="True" timeStamp="20090228T12:17:01.000" >
<ep:Workspace id="d815952d-5f0b-4dd9-9a3a-5a067adb2914" lastModified="2/27/2009 4:17 PM" >
<ep:Title>SA_ProjCreate_WS_CusFld_0227</ep:Title>
<ep:WorkspaceType id="eba14bec-1be9-465b-af8b-2d9f7aff4b3e" >
<ep:Title>Full Service</ep:Title>
</ep:WorkspaceType>
<ep:field type="native" name="Summary" mayEdit="yes" ></ep:field>
<ep:field type="native" name="ApprovalStatus" mayEdit="no" >NotRequired</ep:field>
<ep:field type="native" name="Budget" mayEdit="yes" >0</ep:field>
<ep:field type="native" name="CreatedOn" mayEdit="no" >2/27/2009</ep:field>
<ep:field type="native" name="StartDate" mayEdit="yes" >2/27/2009</ep:field>
<ep:field type="native" name="EndDate" mayEdit="yes" >3/10/2009</ep:field>
<ep:field type="native" name="Health" mayEdit="yes" >OnPlan</ep:field>
<ep:field type="native" name="Owner" mayEdit="no" >Suhel Ahmed</ep:field>
<ep:field type="native" name="PercentComplete" mayEdit="no" >0</ep:field>
<ep:field type="native" name="Priority" mayEdit="yes" >Medium</ep:field>
<ep:field type="native" name="Budget" mayEdit="no" >0</ep:field>
<ep:field type="native" name="TotalBudget" mayEdit="no" >0</ep:field>
<ep:field type="native" name="PlannedCostFromTasks" mayEdit="no" >0</ep:field>
<ep:field type="native" name="TotalActualCost" mayEdit="no" >0</ep:field>
<ep:field type="native" name="TotalMinutesWorked" mayEdit="no" >0</ep:field>
<ep:field type="custom" name="SalesForceID" mayEdit="yes" id="359e1a31-ebaa-4ef9-b540-1556c0a1b206" >666</ep:field>
<ep:field type="custom" name="Client" mayEdit="yes" id="d0d69a76-573e-4534-b135-826753ed60aa" ></ep:field>
<ep:field type="custom" name="Region" mayEdit="yes" id="a0d96369-ad6f-4096-b11e-151b508d2030" >GMI</ep:field>
<ep:field type="custom" name="ProductType" mayEdit="yes" id="2ece64e9-ecbc-46dc-8e7b-fe6ba81dfb39" ></ep:field>
</ep:Workspace>
</ep:Response>]]>
</CreateWorkspaceResult>
</CreateWorkspaceResponse>
</soap:Body>
</soap:Envelope>
|
|

March 11th, 2009, 10:29 AM
|
|
Friend of Wrox
|
|
Join Date: Nov 2007
Posts: 1,243
Thanks: 0
Thanked 245 Times in 244 Posts
|
|
First of all the XSLT/XPath data model does not know any CDATA section nodes, it only knows text nodes, whether they are marked up as simple text or as CDATA does not matter and can not be distinguished in your XSLT stylesheet.
What you can do however is remove the contents of that 'CreateWorkspaceResult' element:
Code:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
xmlns:bs="http://www.sampleproject.com/webservice/BusinessServices"
exclude-result-prefixes="bs">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="bs:CreateWorkspaceResult">
<xsl:copy>
<xsl:apply-templates select="@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
__________________
Martin Honnen
Microsoft MVP (XML, Data Platform Development) 2005/04 - 2013/03
My blog
|
|

March 12th, 2009, 12:33 AM
|
|
Authorized User
|
|
Join Date: Mar 2009
Posts: 13
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
Thx for your help but i need the o/p like this :
when i use this xslt i got the o/p like this:
http://www.samplepeoject.com/webservice/BusinessServices/CreateWorkspaceResponseuuid:59e55139-1062-4f42-8509-d9218d76daebuuid:2af90059-eb06-4762-8de8-c8ea72b0fc70http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous2009-02-28T00:17:01Z2009-02-28T00:22:01Z<ep:Response xmlns:ep="www.samplepeoject.com/response" success="True" timeStamp="20090228T12:17:01.000" > <ep:Workspace id="d815952d-5f0b-4dd9-9a3a-5a067adb2914" lastModified="2/27/2009 4:17 PM" > <ep:Title>SA_ProjCreate_WS_CusFld_0227</ep:Title> <ep:WorkspaceType id="eba14bec-1be9-465b-af8b-2d9f7aff4b3e" > <ep:Title>Full Service</ep:Title> </ep:WorkspaceType> <ep:field type="native" name="Summary" mayEdit="yes" ></ep:field> <ep:field type="native" name="ApprovalStatus" mayEdit="no" >NotRequired</ep:field> <ep:field type="native" name="Budget" mayEdit="yes" >0</ep:field> <ep:field type="native" name="CreatedOn" mayEdit="no" >2/27/2009</ep:field> <ep:field type="native" name="StartDate" mayEdit="yes" >2/27/2009</ep:field> <ep:field type="native" name="EndDate" mayEdit="yes" >3/10/2009</ep:field> <ep:field type="native" name="Health" mayEdit="yes" >OnPlan</ep:field> <ep:field type="native" name="Owner" mayEdit="no" >Suhel Ahmed</ep:field> <ep:field type="native" name="PercentComplete" mayEdit="no" >0</ep:field> <ep:field type="native" name="Priority" mayEdit="yes" >Medium</ep:field> <ep:field type="native" name="Budget" mayEdit="no" >0</ep:field> <ep:field type="native" name="TotalBudget" mayEdit="no" >0</ep:field> <ep:field type="native" name="PlannedCostFromTasks" mayEdit="no" >0</ep:field> <ep:field type="native" name="TotalActualCost" mayEdit="no" >0</ep:field> <ep:field type="native" name="TotalMinutesWorked" mayEdit="no" >0</ep:field> <ep:field type="custom" name="SalesForceID" mayEdit="yes" id="359e1a31-ebaa-4ef9-b540-1556c0a1b206" >666</ep:field> <ep:field type="custom" name="Client" mayEdit="yes" id="d0d69a76-573e-4534-b135-826753ed60aa" ></ep:field> <ep:field type="custom" name="Region" mayEdit="yes" id="a0d96369-ad6f-4096-b11e-151b508d2030" >GMI</ep:field> <ep:field type="custom" name="ProductType" mayEdit="yes" id="2ece64e9-ecbc-46dc-8e7b-fe6ba81dfb39" ></ep:field> </ep:Workspace> </ep:Response>
As you can see in the above o/p, the data in the <soap:header> coming as text(highlighted in pink) but not as a nodes/elements.my required o/p is:
<?xml-stylesheet type="text/xsl" href="Successful_Creatsamplepeoject_Res.xsl"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<soap:Header>
<wsa:Action>http://www.samplepeoject.com/webservice/BusinessServices/CreateWorkspaceResponse</wsa:Action>
<wsa:MessageID>uuid:59e55139-1062-4f42-8509-d9218d76daeb</wsa:MessageID>
<wsa:RelatesTo>uuid:2af90059-eb06-4762-8de8-c8ea72b0fc70</wsa:RelatesTo>
<wsa:To>http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous</wsa:To>
<wsse:Security>
<wsu:Timestamp wsu:Id="Timestamp-4e49cb36-9397-43a0-b62e-ddb2098abd43">
<wsu:Created>2009-02-28T00:17:01Z</wsu:Created>
<wsu:Expires>2009-02-28T00:22:01Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</soap:Header>
<soap:Body>
<CreateWorkspaceResponse xmlns="http://www.samplepeoject.com/webservice/BusinessServices">
<CreateWorkspaceResult>
[<ep:Response xmlns:ep="www.samplepeoject.com/response" success="True" timeStamp="20090228T12:17:01.000" >
<ep:Workspace id="d815952d-5f0b-4dd9-9a3a-5a067adb2914" lastModified="2/27/2009 4:17 PM" >
<ep:Title>SA_ProjCreate_WS_CusFld_0227</ep:Title>
<ep:WorkspaceType id="eba14bec-1be9-465b-af8b-2d9f7aff4b3e" >
<ep:Title>Full Service</ep:Title>
</ep:WorkspaceType>
<ep:field type="native" name="Summary" mayEdit="yes" ></ep:field>
<ep:field type="native" name="ApprovalStatus" mayEdit="no" >NotRequired</ep:field>
<ep:field type="native" name="Budget" mayEdit="yes" >0</ep:field>
<ep:field type="native" name="CreatedOn" mayEdit="no" >2/27/2009</ep:field>
<ep:field type="native" name="StartDate" mayEdit="yes" >2/27/2009</ep:field>
<ep:field type="native" name="EndDate" mayEdit="yes" >3/10/2009</ep:field>
<ep:field type="native" name="Health" mayEdit="yes" >OnPlan</ep:field>
<ep:field type="native" name="Owner" mayEdit="no" >John AB</ep:field>
<ep:field type="native" name="PercentComplete" mayEdit="no" >0</ep:field>
<ep:field type="native" name="Priority" mayEdit="yes" >Medium</ep:field>
<ep:field type="native" name="Budget" mayEdit="no" >0</ep:field>
<ep:field type="native" name="TotalBudget" mayEdit="no" >0</ep:field>
<ep:field type="native" name="PlannedCostFromTasks" mayEdit="no" >0</ep:field>
<ep:field type="native" name="TotalActualCost" mayEdit="no" >0</ep:field>
<ep:field type="native" name="TotalMinutesWorked" mayEdit="no" >0</ep:field>
<ep:field type="custom" name="SalesForceID" mayEdit="yes" id="359e1a31-ebaa-4ef9-b540-1556c0a1b206" >666</ep:field>
<ep:field type="custom" name="Client" mayEdit="yes" id="d0d69a76-573e-4534-b135-826753ed60aa" ></ep:field>
<ep:field type="custom" name="Region" mayEdit="yes" id="a0d96369-ad6f-4096-b11e-151b508d2030" >GMI</ep:field>
<ep:field type="custom" name="ProductType" mayEdit="yes" id="2ece64e9-ecbc-46dc-8e7b-fe6ba81dfb39" ></ep:field>
</ep:Workspace>
</ep:Response>
</CreateWorkspaceResult>
</CreateWorkspaceResponse>
</soap:Body>
</soap:Envelope>
let me know ASAP.
thanks.
|
|

March 12th, 2009, 10:08 AM
|
|
Friend of Wrox
|
|
Join Date: Feb 2009
Posts: 119
Thanks: 25
Thanked 3 Times in 3 Posts
|
|
He is doing a client side transformation (chaining the xsl to the xml) and outputing the results to the browser, which get shown as text/html
|
|

March 12th, 2009, 10:39 AM
|
|
Friend of Wrox
|
|
Join Date: Nov 2007
Posts: 1,243
Thanks: 0
Thanked 245 Times in 244 Posts
|
|
Unfortunately your post says "i need the o/p like this :" but does not show anything.
What the suggested stylesheet does is remove any contents from the 'CreateWorkspaceResult' element. If you don't want to remove the contents but rather want to transform the escaped markup in the CDATA section into nodes in the result tree then one way to achieve that is the disable-output-escaping way already suggested. You should note however that that is an optional serialization feature not supported by any XSLT processor in all settings. For instance Firefox/Mozilla's XSLT processor does not serialize at all and therefore does not support disable-output-esacaping.
__________________
Martin Honnen
Microsoft MVP (XML, Data Platform Development) 2005/04 - 2013/03
My blog
|
|

March 12th, 2009, 11:10 PM
|
|
Authorized User
|
|
Join Date: Mar 2009
Posts: 13
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
Here my i/p and o/p both should be xml and both contents of i/p and o/p are same except that <![CDATA[]] stripped out from o/p.
my i/p is:
<?xml-stylesheet type="text/xsl" href="Successful_Creatsamplepeoject_Res.xsl"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<soap:Header>
<wsa:Action>http://www.samplepeoject.com/webservice/BusinessServices/CreateWorkspaceResponse</wsa:Action>
<wsa:MessageID>uuid:59e55139-1062-4f42-8509-d9218d76daeb</wsa:MessageID>
<wsa:RelatesTo>uuid:2af90059-eb06-4762-8de8-c8ea72b0fc70</wsa:RelatesTo>
<wsa:To>http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous</wsa:To>
<wsse:Security>
<wsu:Timestamp wsu:Id="Timestamp-4e49cb36-9397-43a0-b62e-ddb2098abd43">
<wsu:Created>2009-02-28T00:17:01Z</wsu:Created>
<wsu:Expires>2009-02-28T00:22:01Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</soap:Header>
<soap:Body>
<CreateWorkspaceResponse xmlns="http://www.samplepeoject.com/webservice/BusinessServices">
<CreateWorkspaceResult>
<![CDATA[<ep:Response xmlns:ep="www.samplepeoject.com/response" success="True" timeStamp="20090228T12:17:01.000" >
<ep:Workspace id="d815952d-5f0b-4dd9-9a3a-5a067adb2914" lastModified="2/27/2009 4:17 PM" >
<ep:Title>SA_ProjCreate_WS_CusFld_0227</ep:Title>
<ep:WorkspaceType id="eba14bec-1be9-465b-af8b-2d9f7aff4b3e" >
<ep:Title>Full Service</ep:Title>
</ep:WorkspaceType>
<ep:field type="native" name="Summary" mayEdit="yes" ></ep:field>
</ep:Workspace>
</ep:Response>]]>
</CreateWorkspaceResult>
</CreateWorkspaceResponse>
</soap:Body>
</soap:Envelope>
o/p should be:
<?xml-stylesheet type="text/xsl" href="Successful_Creatsamplepeoject_Res.xsl"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<soap:Header>
<wsa:Action>http://www.samplepeoject.com/webservice/BusinessServices/CreateWorkspaceResponse</wsa:Action>
<wsa:MessageID>uuid:59e55139-1062-4f42-8509-d9218d76daeb</wsa:MessageID>
<wsa:RelatesTo>uuid:2af90059-eb06-4762-8de8-c8ea72b0fc70</wsa:RelatesTo>
<wsa:To>http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous</wsa:To>
<wsse:Security>
<wsu:Timestamp wsu:Id="Timestamp-4e49cb36-9397-43a0-b62e-ddb2098abd43">
<wsu:Created>2009-02-28T00:17:01Z</wsu:Created>
<wsu:Expires>2009-02-28T00:22:01Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</soap:Header>
<soap:Body>
<CreateWorkspaceResponse xmlns="http://www.samplepeoject.com/webservice/BusinessServices">
<CreateWorkspaceResult>
<ep:Response xmlns:ep="www.samplepeoject.com/response" success="True" timeStamp="20090228T12:17:01.000" >
<ep:Workspace id="d815952d-5f0b-4dd9-9a3a-5a067adb2914" lastModified="2/27/2009 4:17 PM" >
<ep:Title>SA_ProjCreate_WS_CusFld_0227</ep:Title>
<ep:WorkspaceType id="eba14bec-1be9-465b-af8b-2d9f7aff4b3e" >
<ep:Title>Full Service</ep:Title>
</ep:WorkspaceType>
<ep:field type="native" name="Summary" mayEdit="yes" ></ep:field>
</ep:Workspace>
</ep:Response>
</CreateWorkspaceResult>
</CreateWorkspaceResponse>
</soap:Body>
</soap:Envelope>
i want the o/p as xml not as txt/html.
Thanks,
XSL USER.
|
|

March 13th, 2009, 10:33 AM
|
|
Friend of Wrox
|
|
Join Date: Nov 2007
Posts: 1,243
Thanks: 0
Thanked 245 Times in 244 Posts
|
|
Try whether
Code:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
xmlns:bs="http://www.sampleproject.com/webservice/BusinessServices"
exclude-result-prefixes="bs">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="bs:CreateWorkspaceResult">
<xsl:copy>
<xsl:value-of select="." disable-output-escaping="yes"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
works with your XSLT processor.
__________________
Martin Honnen
Microsoft MVP (XML, Data Platform Development) 2005/04 - 2013/03
My blog
|
|

March 15th, 2009, 10:45 PM
|
|
Authorized User
|
|
Join Date: Mar 2009
Posts: 13
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
I didn't get the desired o/p but thanks for your help & support.
|
|

March 16th, 2009, 08:03 AM
|
|
Friend of Wrox
|
|
Join Date: Nov 2007
Posts: 1,243
Thanks: 0
Thanked 245 Times in 244 Posts
|
|
Well which XSLT processor do you use, how do you run the transformation?
__________________
Martin Honnen
Microsoft MVP (XML, Data Platform Development) 2005/04 - 2013/03
My blog
|
|

March 16th, 2009, 11:18 PM
|
|
Authorized User
|
|
Join Date: Mar 2009
Posts: 13
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
I used XSLT 1.0 and running xslt transformations on the browser.
|
|
 |