Subject: Parsing XML from a CDATA Structure
From: Olson Family <olsonfam@xxxxxxxxxxxxx>
Date: Wed, 03 Aug 2005 20:23:03 -0400
|
Using Saxon 8, I am attempting to parse an XML string from within a CDATA
Structure.
Using the saxon:parse extension I have been able to do this, except when the
xml string includes the following tag at the beginning of the string.
<?xml version="1.0" encoding="UTF-8"?>
I am getting the following error
net.sf.saxon.xpath.DynamicError: org.xml.sax.SAXParseException: The
processing instruction
target matching "[xX][mM][lL]" is not allowed.
Transformation failed: Run-time errors were reported
The sample xsl file will succesfully parse the xml file if I remove the
string from the cdata structure.
I don't control the structure of the XML, so I do not have the ability to
somehow strip out the ?xml string.
Is there any way to have Saxon ignore this string.
===============file.xsl===========================
> <?xml version="1.0" encoding="ISO-8859-1" ?>
> <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:saxon="http://saxon.sf.net/">
> <xsl:output method="text" indent="no"/>
> <xsl:template match="/">
> <xsl:apply-templates
select="busmessage/body/field[@name='^data^']"/>
> </xsl:template>
>
> <xsl:template match="busmessage/body/field[@name='^data^']">
>
> <ID>
> <xsl:variable name="dynamic"
select="saxon:parse(field[@name='body'])"/>
> <xsl:value-of
select="$dynamic/usiTradeEvent/tradeId"/>
> </ID>
> </xsl:template>
> </xsl:stylesheet>
===============file.xml (with <?xml version="1.0" encoding="UTF-8"?>) string
=================
> <?xml version="1.0"?>
> <busmessage>
> <header>
> <sendSubject>TEST.MESSAGE</sendSubject>
> <replySubject></replySubject>
> <sender seq="2687" timeLimit="0.0">AuroraPub</sender>
> </header>
> <body>
> <field name="^pfmt^" busType="16" javaType="java.lang.Short" id="0">
> 10</field>
> <field name="^ver^" busType="16" javaType="java.lang.Short" id="0">
> 30</field>
> <field name="^type^" busType="16" javaType="java.lang.Short" id="0">
> 1</field>
> <field name="^encoding^" busType="16" javaType="java.lang.Short"
id="0">
> 1</field>
> <field name="^prefixList^" busType="1"
javaType="com.tibco.tibrv.TibrvMsg" id="0">
> <field name="default" busType="8" javaType="java.lang.String" id="0">
> <![CDATA[/tibco/public/class/DEFI/FI/Upstreaminterfaces/CF]]>
> </field>
> </field>
> <field name="^tracking^" busType="1"
javaType="com.tibco.tibrv.TibrvMsg" id="0">
> <field name="^id^" busType="8" javaType="java.lang.String" id="0">
> <![CDATA[1LE--A--EixxCk6Q-0q6eX6Bs-ItI]]>
> </field>
> <field name="^1^" busType="8" javaType="java.lang.String" id="1">
>
<![CDATA[BW.Aurora-Aurora.Process/DEFI/FI/Upstreaminterfaces/Aurora.process.
Job-18148]]>
> </field>
> </field>
> <field name="^data^" busType="1" javaType="com.tibco.tibrv.TibrvMsg"
id="0">
> <field name="^class^" busType="8" javaType="java.lang.String" id="0">
> <![CDATA[CFMsg]]>
> </field>
> <field name="body" busType="8" javaType="java.lang.String" id="0">
> <![CDATA[<?xml version="1.0" encoding="UTF-8"?>
> <usiTradeEvent>
> <eventType>New</eventType>
> <tradeType>Buy</tradeType>
> <tradeScheme>MUSTANG</tradeScheme>
> <tradeId>RICHO-00123456</tradeId>
> <tradeVersion>0</tradeVersion>
> <portfolioId>MPT1</portfolioId>
> <partyScheme>CIF</partyScheme>
> <partyType>COUNTERPARTY</partyType>
> <partyId>MX-5</partyId>
> <traderScheme>MUSTANG</traderScheme>
> <traderId>RGrandur</traderId>
> <marginAmount>0.000000</marginAmount>
> <marginBpMultiplier>1</marginBpMultiplier>
> <tradeDate>2005-08-02</tradeDate>
> <inputTimeStamp>2005-08-02</inputTimeStamp>
> <comment>TW</comment>
> <bond>
> <securityScheme>CUSIP</securityScheme>
> <securityId>VRR562</securityId>
> <nominalAmount>38.00</nominalAmount>
> <priceType>PRICE</priceType>
> <price>98.9921875000</price>
> <settlementDate>2005-08-03</settlementDate>
> </bond>
> </usiTradeEvent>]]>
> </field>
> </field>
> </body>
> </busmessage>
================= output ==============================
net.sf.saxon.xpath.DynamicError: org.xml.sax.SAXParseException: The
processing instruction
target matching "[xX][mM][lL]" is not allowed.
Transformation failed: Run-time errors were reported
===============file1.xml (without <?xml version="1.0" encoding="UTF-8"?>)
string =================
> <?xml version="1.0"?>
> <busmessage>
> <header>
> <sendSubject>TEST.MESSAGE</sendSubject>
> <replySubject></replySubject>
> <sender seq="2687" timeLimit="0.0">AuroraPub</sender>
> </header>
> <body>
> <field name="^pfmt^" busType="16" javaType="java.lang.Short" id="0">
> 10</field>
> <field name="^ver^" busType="16" javaType="java.lang.Short" id="0">
> 30</field>
> <field name="^type^" busType="16" javaType="java.lang.Short" id="0">
> 1</field>
> <field name="^encoding^" busType="16" javaType="java.lang.Short"
id="0">
> 1</field>
> <field name="^prefixList^" busType="1"
javaType="com.tibco.tibrv.TibrvMsg" id="0">
> <field name="default" busType="8" javaType="java.lang.String" id="0">
> <![CDATA[/tibco/public/class/DEFI/FI/Upstreaminterfaces/CF]]>
> </field>
> </field>
> <field name="^tracking^" busType="1"
javaType="com.tibco.tibrv.TibrvMsg" id="0">
> <field name="^id^" busType="8" javaType="java.lang.String" id="0">
> <![CDATA[1LE--A--EixxCk6Q-0q6eX6Bs-ItI]]>
> </field>
> <field name="^1^" busType="8" javaType="java.lang.String" id="1">
>
<![CDATA[BW.Aurora-Aurora.Process/DEFI/FI/Upstreaminterfaces/Aurora.process.
Job-18148]]>
> </field>
> </field>
> <field name="^data^" busType="1" javaType="com.tibco.tibrv.TibrvMsg"
id="0">
> <field name="^class^" busType="8" javaType="java.lang.String" id="0">
> <![CDATA[CFMsg]]>
> </field>
> <field name="body" busType="8" javaType="java.lang.String" id="0">
> <![CDATA[<usiTradeEvent>
> <eventType>New</eventType>
> <tradeType>Buy</tradeType>
> <tradeScheme>MUSTANG</tradeScheme>
> <tradeId>RICHO-00123456</tradeId>
> <tradeVersion>0</tradeVersion>
> <portfolioId>MPT1</portfolioId>
> <partyScheme>CIF</partyScheme>
> <partyType>COUNTERPARTY</partyType>
> <partyId>MX-5</partyId>
> <traderScheme>MUSTANG</traderScheme>
> <traderId>RGrandur</traderId>
> <marginAmount>0.000000</marginAmount>
> <marginBpMultiplier>1</marginBpMultiplier>
> <tradeDate>2005-08-02</tradeDate>
> <inputTimeStamp>2005-08-02</inputTimeStamp>
> <comment>TW</comment>
> <bond>
> <securityScheme>CUSIP</securityScheme>
> <securityId>VRR562</securityId>
> <nominalAmount>38.00</nominalAmount>
> <priceType>PRICE</priceType>
> <price>98.9921875000</price>
> <settlementDate>2005-08-03</settlementDate>
> </bond>
> </usiTradeEvent>]]>
> </field>
> </field>
> </body>
> </busmessage>
================= output ==============================
RICHO-00123456
|