Pass an XML element path in as a parameter of a class.
Hey all,
I am creating a class to handle some audio in an app I am building. This class will need to accept the XML element path as a passed parameter and or a getter.
examples of some XML elements I would like to pass to the the audio handler class to access them.
Dialog.introScreen.text
or
Dialog.secondScreen.main.text
ect.
I pretty sure this is not a string data type and thus cannot be passed as a string (I could be wrong though), if not, what data type would I pass it as?
Thanks.
you're welcome.
(and, you'll find out soon enough what type that is. if you try and cast that as an XMLList item - or anything else that can't be coerced into that type, flash will tell you it can't convert a Sprite or whatever into an XMLList object.)
Similar Messages
-
How to pass a xml CDATA in string element when OSB calling a webservice?
How to pass a xml CDATA in string element when OSB calling a webservice?
I have a business service (biz) that route to operation of a webservice.
A example of request to this webservice legacy:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:eg="example">
<soapenv:Header/>
<soapenv:Body>
<ex:execute>
<ex:arg><![CDATA[<searchCustomerByDocumentNumber>
<documentNumber>12345678909</documentNumber>
</searchCustomerByDocumentNumber>]]></ex:arg>
</ex:execute>
</soapenv:Body>
</soapenv:Envelope>
the type of ex:arg is a string.
How to pass this CDATA structure to webservice in OSB?Steps to solve this problem:
1. Create a XML Schema. E.g.:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="unqualified">
<xs:complexType name="searchCustomerByDocumentNumber">
<xs:sequence>
<xs:element name="documentNumber" minOccurs="0">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string" />
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="searchCustomerByDocumentNumber" type="searchCustomerByDocumentNumber"></xs:element>
</xs:schema>
With this XSD, the XML can be generate:
<?xml version="1.0" encoding="UTF-8"?>
<searchCustomerByDocumentNumber xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="searchCustomerByDocumentNumber.xsd">
<documentNumber>documentNumber</documentNumber>
</searchCustomerByDocumentNumber>
2. Create a XQuery to create a searchCustomerByDocumentNumber ComplexType. E.g.:
(:: pragma bea:global-element-return element="searchCustomerByDocumentNumber" location="searchCustomerByDocumentNumber.xsd" ::)
declare namespace xf = "http://tempuri.org/NovoSia/CreateSearchCustomerByDocumentNumber/";
declare function xf:CreateSearchCustomerByDocumentNumber($documentNumber as xs:string)
as element(searchCustomerByDocumentNumber) {
<searchCustomerByDocumentNumber>
<documentNumber>{ $documentNumber }</documentNumber>
</searchCustomerByDocumentNumber>
declare variable $documentNumber as xs:string external;
xf:CreateSearchCustomerByDocumentNumber($documentNumber)
3. In your stage in pipeline proxy add a assign calling the XQuery created passing the document number of your payload.
Assign to a variable (e.g.: called searchCustomerByDocumentNumberRequest)
4. Create another XQuery Transformation (XQ) to create a request to the webservice legacy. E.g.:
<ex:arg>{fn-bea:serialize($searchCustomerByDocumentNumberRequest)}</ex:arg>
For more information about xquery serialize function:
41.2.6 fn-bea:serialize()
You can use the fn-bea:serialize() function if you need to represent an XML document as a string instead of as an XML element. For example, you may want to exchange an XML document through an EJB interface and the EJB method takes String as argument. The function has the following signature:
fn-bea:serialize($input as item()) as xs:string
Source: http://docs.oracle.com/cd/E14571_01/doc.1111/e15867/xquery.htm -
Unable to extract XML element value
Hello,
I am trying to extract the value of the element, but getting an error which is mentioned below..
1) Here's the XML:
<?xml version="1.0" encoding="UTF-8" standalone=''yes''?>
<ns1:XLS version="1.0" ns1:lang="en" rel="4.6.1.sp01" xmlns:ns1="http://www.opengis.net/xls">
<ns1:ResponseHeader sessionID="888"/>
<ns1:Response requestID="888" numberOfResponses="1" version="1.0">
<ns1:DDSXMLResponse queryToken="S2LN">
<ns1:Status>
<ns1:Token keyword="EXTIME" value="1"/>
<ns1:Token keyword="S" value="OK"/>
<ns1:Token keyword="N" value="1"/>
</ns1:Status>
<ns1:OutputGroups>
<ns1:OutputGroup>
<ns1:Token1 keyword="LL" value="40.195166,-119.512163"/>
<ns1:Token2 keyword="SN" value=""/>
<ns1:Token3 keyword="PC" value="89405"/>
<ns1:Token4 keyword="COUNTRY" value="USA"/>
<ns1:Token5 keyword="STATE" value="NV"/>
<ns1:Token6 keyword="CITY" value=""/>
</ns1:OutputGroup>
</ns1:OutputGroups>
</ns1:DDSXMLResponse>
</ns1:Response>
</ns1:XLS>
2) here's my query:
SELECT b.street_number
FROM (SELECT XMLTYPE ('<?xml version="1.0" encoding="UTF-8" standalone=''yes''?>
<ns1:XLS version="1.0" ns1:lang="en" rel="4.6.1.sp01" xmlns:ns1="http://www.opengis.net/xls">
<ns1:ResponseHeader sessionID="888"/>
<ns1:Response requestID="888" numberOfResponses="1" version="1.0">
<ns1:DDSXMLResponse queryToken="S2LN">
<ns1:Status>
<ns1:Token keyword="EXTIME" value="1"/>
<ns1:Token keyword="S" value="OK"/>
<ns1:Token keyword="N" value="1"/>
</ns1:Status>
<ns1:OutputGroups>
<ns1:OutputGroup>
<ns1:Token1 keyword="LL" value="40.195166,-119.512163"/>
<ns1:Token2 keyword="SN" value=""/>
<ns1:Token3 keyword="PC" value="89405"/>
<ns1:Token4 keyword="COUNTRY" value="USA"/>
<ns1:Token5 keyword="STATE" value="NV"/>
<ns1:Token6 keyword="CITY" value=""/>
</ns1:OutputGroup>
</ns1:OutputGroups>
</ns1:DDSXMLResponse>
</ns1:Response>
</ns1:XLS>
') AS revcode_xml
FROM DUAL) A,
XMLTABLE (
XMLNAMESPACES (DEFAULT 'http://www.opengis.net/xls'), '/XLS'
PASSING A.revcode_xml
COLUMNS street_number VARCHAR2(200) PATH 'Response/DDSXMLResponse/OutputGroups/OutputGroup/Token/[@keyword="State"]') b
I am getting this error:
ORA-19112: error raised during evaluation: XVM-01003: [XPST0003] Syntax error at '['1 declare default element namespace
What am I doing wrong? This is my first time working with XML, so maybe it's something basic which I am missing. So any help would be appreciated!!Hi,
What am I doing wrong?The PATH expression is not a valid XPath expression, probably a typo?
Response/DDSXMLResponse/OutputGroups/OutputGroup/Token/[@keyword="State"]
^
no slash hereshould be :
Response/DDSXMLResponse/OutputGroups/OutputGroup/Token[@keyword="State"]Anyway, considering your input XML, this path points to nothing. There's no "Token" element child under OutputGroup.
Maybe you meant something like this :
SQL> SELECT b.street_number
2 FROM (SELECT XMLTYPE ('<?xml version="1.0" encoding="UTF-8" standalone=''yes''?>
3 <ns1:XLS version="1.0" ns1:lang="en" rel="4.6.1.sp01" xmlns:ns1="http://www.opengis.net/xls">
4 <ns1:ResponseHeader sessionID="888"/>
5 <ns1:Response requestID="888" numberOfResponses="1" version="1.0">
6 <ns1:DDSXMLResponse queryToken="S2LN">
7 <ns1:Status>
8 <ns1:Token keyword="EXTIME" value="1"/>
9 <ns1:Token keyword="S" value="OK"/>
10 <ns1:Token keyword="N" value="1"/>
11 </ns1:Status>
12 <ns1:OutputGroups>
13 <ns1:OutputGroup>
14 <ns1:Token1 keyword="LL" value="40.195166,-119.512163"/>
15 <ns1:Token2 keyword="SN" value=""/>
16 <ns1:Token3 keyword="PC" value="89405"/>
17 <ns1:Token4 keyword="COUNTRY" value="USA"/>
18 <ns1:Token5 keyword="STATE" value="NV"/>
19 <ns1:Token6 keyword="CITY" value=""/>
20 </ns1:OutputGroup>
21 </ns1:OutputGroups>
22 </ns1:DDSXMLResponse>
23 </ns1:Response>
24 </ns1:XLS>
25 ') AS revcode_xml
26 FROM DUAL) A,
27 XMLTABLE (
28 XMLNAMESPACES (DEFAULT 'http://www.opengis.net/xls')
29 , '/XLS/Response/DDSXMLResponse/OutputGroups/OutputGroup'
30 PASSING A.revcode_xml
31 COLUMNS
32 street_number VARCHAR2(200) PATH '*[@keyword="STATE"]/@value'
33 ) b
34 ;
STREET_NUMBER
NV -
Issue with working on a webservice that has xml elements with attributes
This is a branchout of Thread: Some more complex sample of invokin WS needed_
We are working on a project that involves a outbound SALT Web service call that includes complex elements with attributes..We are looking for options of how to use FML API's to pass these attribute values from the application code.
We opened a ticket with oracle where we were suggested to frame the entire xml and pass the xml using the FML32 of the complex element. But when we framed the xml for Service and put the entire XML which includes the attributes using the FML ID of Service.
Please find a sample Schema and XML similar to the one we are working on...its associated code
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="Service" type="Service_Type" nillable="true">
<xs:annotation>
<xs:documentation>Comment describing your root element</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="Service_Type">
<xs:sequence>
<xs:element name="DateTime" type="xs:dateTime" nillable="true">
</xs:element>
<xs:element name="UUID" nillable="true">
</xs:element>
<xs:element name="Status" type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded">
</xs:element>
</xs:sequence>
<xs:attribute name="Version" type="xs:string" use="required">
</xs:attribute>
<xs:attribute name="Name" type="xs:string" use="required">
</xs:attribute>
</xs:complexType>
</xs:schema>
The sample XML is :
___<?xml version="1.0" encoding="UTF-8"?>___
___<!--Sample XML file generated by XMLSpy v2010 rel. 2 (http://www.altova.com)-->___
___<Service Name="TestService" Version="1.1" xsi:noNamespaceSchemaLocation="Untitled6.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">___
___ <DateTime>2001-12-17T09:30:47Z</DateTime>___
___ <UUID>text</UUID>___
___</Service>___
wsdlcvt generated the mif file with Service as a FML32 type and all its child elements as "mbstring". We tried to leave as it is and we also tried to replace all the child elements and just had a mif entry for "Service" as a mbstring neither produced a different output...Tried to dump using Ferror32 which did not dump any..._
The sample C/C++ code as per suggestions were to do the following...
_1) Have a string with the entire XML for Service_
xmldata="<Service Name=\"TestService"\ Version="1.1\"_ xsi:noNamespaceSchemaLocation=\"Untitled6.xsd\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">_
_ <DateTime>2001-12-17T09:30:47Z</DateTime>_
_ <UUID>text</UUID>_
_</Service>";_
_2) Use Fmbpack32 to create a mbstring data_
_memcpy(reqmbptr, (char*)xmldata.data(),xmldata.length());_
_len=xmldata.length();_
_Fmbpack32(mbcodeName,reqmbptr,len, packdata,(FLDLEN32 *)&packedlen,0);_
userlog("Size of packedlen is %d",packedlen);
3) Add the packed data to the output buffer
Fadd32(fmlbuffer,Service, packdata,packedlen );
But we do not see the Service tag populated in the GWWS outbound request.Everything else makes it....any help on how to move ahead would be appreciated...It seems you switch to the 10gR3 GA and now the whole XML data is mapped to FLD_MBSTRING.
I will forward my sample to you by mail, but this sample is not offical sample, it is just QA test case. You can refere it and check what's the difference.
Please let me know your mail address.
Regards,
Xu he -
[CS3 JS WIN] Get XML Element of paragraph?
Im trying to get the xml element of a selected paragraph.<br />ie:<br /><br /><item><br /><text><br /><code> This is some code </code> <--this is selected in indesign<br /></text><br /></item><br /><br />When I try to use associatedXMLElements[0].xmlElements - it returns all different elements(item,text,code,etc) how do I get it to return the immediate XML Element?
Well what I'm doing is selecting a textframe and then looping through the paragraphs, passing them to the procXML function which is when I try to get the xml element.
The forums ate my structure:
[item]
[text]
[code]This is some code[/code]
[/text]
[/item] -
How to escape or remove the special characters in the xml element by regula
Hi members,
How to escape or remove the special characters in the xml element by regular expression in java??
For Example ,
<my:name> aaaa </my:name>
<my:age> 27 </my:age>
In the above example , i have to retrieve the value of the <my:name> Element(For examlpe -- i have to get "aaaa" from <my:name> tag)...
How to retreive this value by using DOM with XPATH in java
Thanks in AdvanceHi members,
I forget to paste my coding for the above question....This is my coding......In this display the error...... Pls reply ASAP.......
PROGRAM:
import java.io.IOException;
import java.util.Hashtable;
import java.util.Map;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.xml.parsers.*;
import javax.xml.xpath.*;
public class DOMReaderForXMP {
static Document doc;
static XPath xpath;
static Object result;
static NodeList nodes;
public DOMReaderForXMP() throws ParserConfigurationException, SAXException,
IOException, XPathExpressionException {
DocumentBuilderFactory domFactory = DocumentBuilderFactory
.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
doc = builder.parse("d:\\XMP.xml");
XPathFactory factory = XPathFactory.newInstance();
xpath = factory.newXPath();
public static void perform(String path) throws Exception {
result = xpath.evaluate(path, doc, XPathConstants.NODESET);
nodes = (NodeList) result;
public void check() throws Exception {
perform("//my:name/text()");
if (!nodes.item(0).getNodeValue().equals("application/pdf")) {
System.out.println("Mathces....!");
ERROR:
Exception in thread "main" net.sf.saxon.trans.StaticError: XPath syntax error at char 9 in {/my:name}:
Prefix aas has not been declared -
Remove XML tags from XML element in Oracle
Hi,
I have a requirement where I have to remove all the xml tags from xml element with banks, currently I'm using replace 4 times to replace all different types of xml tags, performance is really bad. is there any better option to remove xml tags from xml data leaving the actual data. please find the example data below.
select
TO_CLOB(REPLACE(REPLACE(REPLACE(REPLACE
('<Concatcolumn><ConcatGroupID>MyText Data goes here </ConcatGroupID><ConcatGroupID>Data agian</ConcatGroupID></Concatcolumn>','<ConcatGroupID>'),'<Concatcolumn>'),'</ConcatGroupID>',';'),';</Concatcolumn>')) AS Concatcolumn
from dual
**************Out put*************
MyText Data goes here ;Data agianOne way is to use xquery:
SQL> with t as
select xmltype('<Concatcolumn>
<ConcatGroupID>MyText Data goes here </ConcatGroupID><ConcatGroupID>Data agian</ConcatGroupID></Concatcolumn>'
) xml from dual
select xmlquery('string-join(//text(), ";")' passing xml returning content).getclobval() xml from t
XML
MyText Data goes here ;Data agian
1 row selected. -
Hello,
I've a problem passing a piece of raw XML code to an external assembly to do some tasks.
The problem is that if I use an XSLT like this:
<xsl:template name="xml-to-string-called-template">
<xsl:param name="param1" />
<xsl:element name="ns0:Root">
<xsl:variable name="tryThisTemplate">
<xsl:text disable-output-escaping="yes"></xsl:text>
<xsl:call-template name="identity" />
<xsl:text disable-output-escaping="yes"></xsl:text>
</xsl:variable>
<xsl:copy-of select="$tryThisTemplate" />
</xsl:element>
</xsl:template>
<xsl:template name="identity" match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
I have as output the XML with all tags like expected (the TestFunction take a string as input ad return the same string as output), like this:
<ns0:Root xmlns:ns0="http://BizTalk_Server_ProjectDemo.SchemaOut1Node">
- <ns0:Travel xmlns:ns0="http://BizTalk_Server_ProjectDemo.SchemaIN">
<DateTimeStart>1999-05-31T13:20:00.000-05:00</DateTimeStart>
<Field>Field_0</Field>
</ns0:Travel>
</ns0:Root>
The problem is that if I try to pass the variable to my external assembly, in this way:
<xsl:template name="xml-to-string-called-template">
<xsl:param name="param1" />
<xsl:element name="ns0:Root">
<xsl:variable name="tryThisTemplate">
<xsl:text disable-output-escaping="yes"></xsl:text>
<xsl:call-template name="identity" />
<xsl:text disable-output-escaping="yes"></xsl:text>
</xsl:variable>
<xsl:variable name="pCC" xmlns:ScriptNS0="http://schemas.microsoft.com/BizTalk/2003/ScriptNS0"
select="ScriptNS0:TestFunction($tryThisTemplate)" />
<xsl:text disable-output-escaping="yes"></xsl:text>
<xsl:copy-of select="$pCC" />
<xsl:text disable-output-escaping="yes"></xsl:text>
</xsl:element>
</xsl:template>
saving its return value and printing it, I have as output the values of fields contained in $tryThisTemplate variable, and not all the XML like I need:
<ns0:Root xmlns:ns0="http://BizTalk_Server_ProjectDemo.SchemaOut1Node">1999-05-31T13:20:00.000-05:00
Field_0</ns0:Root>
What can I do to pass all the raw XML to my function and not the values of its fields?
I tried to declare the output method as like xml than html or text but nothing changedFirst, of all your input xml has invalid namespace declaration, is this like below what mean to say:
<ns0:Root xmlns:ns0="http://BizTalk_Server_ProjectDemo.SchemaOut1Node">
<ns1:Travel xmlns:ns1="http://BizTalk_Server_ProjectDemo.SchemaIN">
<DateTimeStart>1999-05-31T13:20:00.000-05:00</DateTimeStart>
<Field>Field_0</Field>
</ns1:Travel>
</ns0:Root>
Second, you can achieve what you are trying to map using very simple map like below:
and you can see the xslt is generated like below:
<?xml version="1.0" encoding="UTF-16"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:var="http://schemas.microsoft.com/BizTalk/2003/var" exclude-result-prefixes="msxsl var s0 userCSharp" version="1.0" xmlns:s0="http://BizTalk_Server_ProjectDemo.SchemaIN" xmlns:ns0="http://BizTalk_Server_ProjectDemo.SchemaOut1Node" xmlns:userCSharp="http://schemas.microsoft.com/BizTalk/2003/userCSharp"> <xsl:output omit-xml-declaration="yes" method="xml" version="1.0" /> <xsl:template match="/"> <xsl:apply-templates select="/ns0:Root" /> </xsl:template> <xsl:template match="/ns0:Root"> <xsl:variable name="var:v1" select="userCSharp:StringConcat(string(s0:Travel/DateTimeStart/text()) , " " , string(s0:Travel/Field/text()))" /> <ns0:Root> <xsl:value-of select="$var:v1" /> </ns0:Root> </xsl:template> <msxsl:script language="C#" implements-prefix="userCSharp"><![CDATA[public string StringConcat(string param0, string param1, string param2){ return param0 + param1 + param2;}]]></msxsl:script></xsl:stylesheet>
Third, if you are really interested passing your whole using xslt, then probably this artical will be helpful to you
http://connectedpawns.wordpress.com/2009/08/01/how-to-copy-the-entire-node-to-element-of-string-type-in-a-map/
Please mark it as Answer if this answers your question
Thanks.
Mo
The contents I write here is my personal views, not the view of my employer and anyone else.
Thank you, yes you're right about the namespaces, but this is only a proof of concept ant I have to adjust it.
What is the functoid you put in the map? And can I pass its output to an external assembly as parameter? (I need to do it and return the output to a certain schema node).
Thank you -
Hi All,
I used this to get dynamic URL resolution for logo on my report.
Simple url:{'http://localhost/logo.jpg'} works just fine for HTML output.
But once I use XML element for URL resolution it does nothing...
url:{concat('http://',FILE_PATH)} returns just 'http://' without value from FILE_PATH element.
Needles to say, that FILE_PATH element on report itself does the job and presents path to the image.
What I am doing wrong?
Thank you.Have a look at this .
Re: problem with dynamic image
or
simple use
url:{concat('http://',.//FILE_PATH} -
XML Element of XML Element of XML Element (and so on...)
Here is my XML data (shorted, in a file myFile):
<LiveData>
<Voltage>
<Total>
<VoltageNow>1052</VoltageNow>
</Total>
</Voltage>
<Power>
<Total>
<PowerNow>345</PowerNow>
</Total>
</LiveData>
I would like to get the VoltageNow and PowerNow values, but the following script does not work:
tell application "System Events"
set elem1 to XML element 1 of XML file myFile /*<LiveData>
set power to XML elements of elem1 whose name is "Power"
set total to XML elements of power whose name is "Total"
set powernow to value of XML elements of total whose name is "PowerNow"
end tell
Error: System Events got an error: Can’t make {} into type string.
BTW, I don't want to use XML Element X because the order may change.
What is the correct method to traverse these elements to obtain values?AppleScript can handle the strings, but the System Events XML Suite doesn't work with text strings - it deals with the XML objects, which have name and value properties. The handler can be modified to show the names of an element, but it is just designed to work with the XML Suite.
The contents of an XML file is just text, so you can forgo System Events and just use regular text manipulation statements, or use another tool such as the Satimage XMLLib osax, which is much more robust and does include commands to display the XML object as a string.
By the way, my original handler was designed and tested in Leopard, but I discovered a Snow Leopard bug that alters the way it returns array/list contents. The following script has changes that return the functionality, in addition to a dialog handler that will display lists:
<pre style="
font-family: Monaco, 'Courier New', Courier, monospace;
font-size: 10px;
font-weight: normal;
margin: 0px;
padding: 5px;
border: 1px solid #000000;
width: 720px; height: 340px;
color: #000000;
background-color: #DAFFB6;
overflow: auto;"
title="this text can be pasted into the Script Editor">
on run -- example
set XMLFile to (choose file without invisibles)
show("element value:", (getXMLElement from {XMLFile, "LiveData", "Voltage", "Total", "VoltageNow"}))
end run
to show(label, something)
show an alert for something, formatting lists and records
parameters - label [text]: the alert text
something [mixed]: an item to put in the alert message
returns nothing
if something is not in {null, missing value} then
try -- show the message
if (class of something) is in {list, record} then (something as number) -- force an error
display alert label message (something as text)
on error errorMessage -- lists and records don't format very well, so cheat
set {here, there} to {(offset of "{" in errorMessage), -(offset of "}" in (reverse of text items of errorMessage) as text)}
display alert label message text here thru there of errorMessage
end try
else
display alert label message "*null or missing value*"
end if
end show
to getXMLElement from XMLItems
get the specified element from a simple XML structure by name or index
the number of items is not fixed, but must be at least 2 (the XML file and an XML element)
parameters: XMLItems [list] -
item 1 [text]: the XML file path (Finder or POSIX)
item 2 [mixed]: the XML element name or index (names are case sensitive)
item(s) 3+ [mixed]: sub item(s)
returns [list]: value of the element
try
if (count XMLItems) is less than 2 then error "getXMLElement handler: item list contains too few items"
tell application "System Events"
set theXMLData to contents of XML file ((the first item of XMLItems) as text)
-- get text of theXMLData
set theXMLElement to XML element 1 of theXMLData -- start at the root element
repeat with anItem in rest of XMLItems -- add on the sub items
set anItem to contents of anItem
try
set anItem to anItem as integer -- index number?
end try
set theXMLElement to (get XML element anItem of theXMLElement)
end repeat
try -- return the element(s)
-- return name of XML elements of theXMLElement
set theResult to value of theXMLElement -- SL built-in result variable does not get set
if theResult is missing value then error -- SL does not error on empty or missing value
return theResult
on error errorMessage number errorNumber -- the element is empty, or a list of items
log errorMessage
return value of XML elements of theXMLElement
end try
end tell
on error errorMessage number errorNumber
log errorMessage
-- return null
error "getXMLElement handler: element not found (" & errorNumber & ")"
end try
end getXMLElement</pre> -
Hi guys,
I am facing a problem in parseing a XML file when the element is in <element/> tag format. Iam using "javax.xml.parsers.SAXParser" to parse the XML. Basically XML contains many fields that are mandatary in my XSD. my requirement is that if there is a SAXParseException, I should get the name of the element for which the error is comming.
What I am doing is, I am storing the name of the element in startElement method, which I print it in the catch block of the error. This code is working fine for <element></element> type of tag. But when the element tag is <element/> this. it does not go in the startElement or endElement block. Hence I always get the name element which is previous to the error element.
How can I get the element name in both form of the element tag. As I have no control over the XML, which is posted on my servlet.I'm not sure why you're having a problem - the SAXException tells you where in the input stream the error is, and SAX parsers may report a validation error at any time so long as it is before passing the invalid element to the content handler. So it's legal for the exception to occur immediately after the startDocument, and will not necessarily occur immediately after the callback for the preceding element.
Eg, if the DTD says you have <!ELEMENT foo (a,b,c,d)> and you have <foo><a/><b/><x/><d/></foo>, then the parser may well report the error before the startElement() call for the foo element, as it is invalid. Such fail-fast parser validation means you can safely update a persistant resource on receipt of the events, rather than having to wait until the element is closed before you are sure it's valid.
This works fine for <element/> tag. But now there is a problem with <element></element> tag.Post the code you have, show how you are mapping from the line no. in the exception to the source data, and state which parser you are using.
Pete -
How to create XML element with out creating a document
I ve been looking for hours for a method to create an XML element without the need for the Document. I am trying to create objects that access the database, and I need in each of these objects a method that returns only an element (ie. getXMLData()). And in the class that created these object, I nee to call the getXML() methods and construct a document. However, I am not looking to create the document if I am not going to use it. In the component class I need to be able to traverse the xml element and read and modify the values. Is there a way to do so with sun's JDK ?
I ve been looking for hours for a method to create an
XML element without the need for the Document.
... I am not looking to create the document if I
am not going to use it.Hi M-A,
Though you have been told the solution, let's stick to your original issue, just for the sake of interest. I gather what you have in mind is finding the answer to the following question: is there a way of creating a document without having to bind it to any data source? The answer is yes. What you might need is the createDocument() method of the DOMImplementation interface which offers lightwight document handling by obviating the need to construct a particular DOM instance. (You could also use the getDOMImplementation() method of the DOMImplementationRegistry interface, but it has bugs.) Here's a sample code:DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder parser = factory.newDocumentBuilder();
DOMImplementation domImpl = parser.getDOMImplementation();
Document doc = domImpl.createDocument(null, "rootnode", null);The above code produces the following document:<?xml version="1.0" encoding="UTF-8"?>
<rootnode/>You can make this document even skinnier if you pass null values to all three parameters of the createDocument() method, in which case the document will only contain the prolog. I think both the creation and the structure of this document are simple enough for you to use it as some sort of utility (e.g. by putting the code in a separate class) for creating elements. -
I have following code snippet in pro *c. I'm Constructing XML element and passing to SP using Clob data type.
When compling pro *c i'm getting following error for xmlelement key word mentioned below
SELECT xmlelement("Id",
*.........1*
PLS-S-00201, identifier 'XMLELEMENT' must be declared
Error at line 203, test.pc
SELECT xmlelement("Id",
*.........1*
PLS-S-00000, SQL Statement ignored
EXEC SQL EXECUTE
declare
l_clob_xml_msg CLOB;
purge_dt DATE DEFAULT SYSDATE;
barcode_in CHAR(20) := 'TEST';
item_no CHAR(8) := '133444';
type_c CHAR(1) := 'C';
BEGIN
SELECT xmlelement("Id",
xmlelement("barCode", trim(barcode_in)),
xmlelement("item", item_no),
xmlelement("typeC", type_c),
xmlelement("purDate", purge_dt )).getclobVal()
INTO l_clob_xml_msg
FROM dual;
test_msg_sp(l_clob_xml_msg );
END;
END-EXEC;
Please let me know pro *c wont support xmlelement tag if i have embedded pl/sql block.
Thanks,
kannantry this.
ap0021_element := dbms_xmldom.createElement(doc,'AP0021');
cntbtch_element := dbms_xmldom.createElement(doc,'CNTBTCH');
new_element := DBMS_XMLDOM.makeElement(
DBMS_XMLDOM.appendChild(DBMS_XMLDOM.makeNode(ap0021_element)
,DBMS_XMLDOM.makeNode(cntbtch_element))); -
Hello,
for some reason, the test case below fails when driven with Java 6. Looks like, when long string data is stored in a XML element, DocumentHandler's characters() method will be provided with incorrect data.
With XML 1.0, parsing works fine in all my tests, Apache Xerces, JRE 5, JRE 6.
With XML 1.1., parsing works fine with Apache Xerces, JRE5 but not with JRE6.
I've checked it with latest JRE 6 update 4.
Anyone else xperiencing such problems with XML1.1 parsing when using JAXP bundled with Java 6?
I've tried to file a bug at bugdatabase, but for some reason I got no response for my issue - so I'm trying the forum now ;-)
Thanx for comments
Merten
import java.io.StringReader;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import junit.framework.TestCase;
import junit.framework.TestResult;
import junit.framework.TestSuite;
/** snippet to demonstrate problem in SAXParser */
public class ProblemWithSAXParser extends TestCase
public static void main(String[] args)
TestResult result=junit.textui.TestRunner.run(suite());
System.exit(result.wasSuccessful() ? 0 : 1);
private static junit.framework.Test suite()
final TestSuite ts=new TestSuite();
ts.addTestSuite(ProblemWithSAXParser.class);
return (ts);
/** small DocumentHandler, just waiting for one and only XML element <c></c> */
class MySAXDocumentHandler extends DefaultHandler
boolean listening=false;
public void startElement(final String uri, final String localName, final String qName, final Attributes attributes)
throws SAXException
System.out.println("startElement uri " + uri + " localName " + localName + " qName " + qName);
if("c".equals(qName))
listening=true;
public void endElement(final String uri, final String localName, final String qName) throws SAXException
System.out.println("endElement uri " + uri + " localName " + localName + " qName " + qName);
if("c".equals(qName))
listening=false;
public void characters(final char ch[], final int start, final int length) throws SAXException
if(listening)
final String str=new String(ch, start, length);
System.out.println("<c> element, start==" + start + " length==" + length + " ch.length==" + ch.length + " ch=="
+ str);
sb.append(str);
private final StringBuffer sb=new StringBuffer();
/** return what I got for XML element <c></c> */
public String toString()
return (sb.toString());
/** test an XML document with an element <c>, use XML 1.0 and XML 1.1 and some (more)
* content in the XML element */
public void testWithSunAndApache() throws Exception
// test XML element content for <c> element
final StringBuffer plain_str=new StringBuffer("");
for(int i=0; i < 500; i++)
plain_str.append("0123456789 This is some text ").append(i).append(". ");
final String xml_orig=plain_str.toString();
// SAX parsers, one Sun, one (original) Apache Xerces
// accept that Apache Xerces is not in path ...
final String prop_name="javax.xml.parsers.SAXParserFactory";
final String prop_val_sun="com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl";
final String prop_val_apache="org.apache.xerces.jaxp.SAXParserFactoryImpl";
System.setProperty(prop_name, prop_val_sun);
final SAXParser sax_sun=SAXParserFactory.newInstance().newSAXParser();
System.out.println("SaxParser Sun= " + sax_sun);
assertTrue(("" + sax_sun).indexOf("com.sun.") >= 0);
System.setProperty(prop_name, prop_val_apache);
SAXParser sax_apache;
try
sax_apache=SAXParserFactory.newInstance().newSAXParser();
catch(final Throwable t)
System.err.println("no Apache Xerces in path? " + t);
sax_apache=null;
System.out.println("SaxParser Apache= " + sax_apache);
assertTrue(sax_apache==null || ("" + sax_apache).startsWith("org.apache."));
// i==0: XML 1.0, i==1: XML 1.1
for(int i=0; i <= 1; i++)
assert i == 0 || i == 1;
final String xml_version=(i == 0 ? "1.0" : "1.1");
final StringBuffer sb=new StringBuffer("<?xml version=\"" + xml_version + "\" encoding=\"UTF-8\"?><c>");
sb.append(xml_orig);
sb.append("</c>");
final String xml=sb.toString();
// parse it!
final StringReader string_reader_sun, string_reader_apache;
string_reader_sun=new StringReader(xml);
final InputSource input_source_sun=new InputSource(string_reader_sun);
string_reader_apache=new StringReader(xml);
final InputSource input_source_apache=new InputSource(string_reader_apache);
final MySAXDocumentHandler my_handler_sun, my_handler_apache;
my_handler_sun=new MySAXDocumentHandler();
my_handler_apache=new MySAXDocumentHandler();
sax_sun.parse(input_source_sun, my_handler_sun);
if(sax_apache!=null)
sax_apache.parse(input_source_apache, my_handler_apache);
final String xml_sun=my_handler_sun.toString();
final String xml_apache=my_handler_apache.toString();
assertNotNull(xml_sun);
assertNotNull(xml_apache);
System.out.println("xml version " + xml_version);
System.out.println("xml " + xml);
System.out.println("xml_orig " + xml_orig);
System.out.println("xml_sun " + xml_sun);
System.out.println("xml_apache " + xml_apache);
// test the data returned from DocumentHandler
if(sax_apache!=null)
assertEquals(xml_orig, xml_apache);
assertEquals(xml_orig.length(), xml_sun.length()); // length seems to be okay
assertEquals(xml_orig, xml_sun); // content seems to be not okay for XML 1.1
}thanx, DrClap, haven't seen the "code" button for some reason, code is attached again
The output of my test is like this for JRE6 (truncated)
xml_sun 456789 This is is some text 0. 0123456789 This is some text 1.
xml_apache 0123456789 This is some text 0. 0123456789 This is some text 1.
Notice, xml_sun not only starts wrong ("0123" missing) - for some reason, the text there is not "This is some text" but "This is is some text" - very interesting in a way. I guess there's an issue with repeated text chunks ...
So, the data in my XML element is kind of changed, the length of the string is okay but the characters are "misplaced" or so :-) I thought about a problem with StringBuffer first, but the StringBuffer works fine for Apache ... so I really think there's an issue with JRE 6's parser for XML 1.1
Merten
import java.io.StringReader;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import junit.framework.TestCase;
import junit.framework.TestResult;
import junit.framework.TestSuite;
/** snippet to demonstrate problem in SAXParser */
public class ProblemWithSAXParser extends TestCase
public static void main(String[] args)
TestResult result=junit.textui.TestRunner.run(suite());
System.exit(result.wasSuccessful() ? 0 : 1);
private static junit.framework.Test suite()
final TestSuite ts=new TestSuite();
ts.addTestSuite(ProblemWithSAXParser.class);
return (ts);
/** small DocumentHandler, just waiting for one and only XML element <c></c> */
class MySAXDocumentHandler extends DefaultHandler
boolean listening=false;
public void startElement(final String uri, final String localName, final String qName, final Attributes attributes)
throws SAXException
System.out.println("startElement uri " + uri + " localName " + localName + " qName " + qName);
if("c".equals(qName))
listening=true;
public void endElement(final String uri, final String localName, final String qName) throws SAXException
System.out.println("endElement uri " + uri + " localName " + localName + " qName " + qName);
if("c".equals(qName))
listening=false;
public void characters(final char ch[], final int start, final int length) throws SAXException
if(listening)
final String str=new String(ch, start, length);
System.out.println("<c> element, start==" + start + " length==" + length + " ch.length==" + ch.length + " ch=="
+ str);
sb.append(str);
private final StringBuffer sb=new StringBuffer();
/** return what I got for XML element <c></c> */
public String toString()
return (sb.toString());
/** test an XML document with an element <c>, use XML 1.0 and XML 1.1 and some (more)
* content in the XML element */
public void testWithSunAndApache() throws Exception
// test XML element content for <c> element
final StringBuffer plain_str=new StringBuffer("");
for(int i=0; i < 500; i++)
plain_str.append("0123456789 This is some text ").append(i).append(". ");
final String xml_orig=plain_str.toString();
// SAX parsers, one Sun, one (original) Apache Xerces
// accept that Apache Xerces is not in path ...
final String prop_name="javax.xml.parsers.SAXParserFactory";
final String prop_val_sun="com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl";
final String prop_val_apache="org.apache.xerces.jaxp.SAXParserFactoryImpl";
System.setProperty(prop_name, prop_val_sun);
final SAXParser sax_sun=SAXParserFactory.newInstance().newSAXParser();
System.out.println("SaxParser Sun= " + sax_sun);
assertTrue(("" + sax_sun).indexOf("com.sun.") >= 0);
System.setProperty(prop_name, prop_val_apache);
SAXParser sax_apache;
try
sax_apache=SAXParserFactory.newInstance().newSAXParser();
catch(final Throwable t)
System.err.println("no Apache Xerces in path? " + t);
sax_apache=null;
System.out.println("SaxParser Apache= " + sax_apache);
assertTrue(sax_apache==null || ("" + sax_apache).startsWith("org.apache."));
// i==0: XML 1.0, i==1: XML 1.1
for(int i=0; i <= 1; i++)
assert i == 0 || i == 1;
final String xml_version=(i == 0 ? "1.0" : "1.1");
final StringBuffer sb=new StringBuffer("<?xml version=\"" + xml_version + "\" encoding=\"UTF-8\"?><c>");
sb.append(xml_orig);
sb.append("</c>");
final String xml=sb.toString();
// parse it!
final StringReader string_reader_sun, string_reader_apache;
string_reader_sun=new StringReader(xml);
final InputSource input_source_sun=new InputSource(string_reader_sun);
string_reader_apache=new StringReader(xml);
final InputSource input_source_apache=new InputSource(string_reader_apache);
final MySAXDocumentHandler my_handler_sun, my_handler_apache;
my_handler_sun=new MySAXDocumentHandler();
my_handler_apache=new MySAXDocumentHandler();
sax_sun.parse(input_source_sun, my_handler_sun);
if(sax_apache!=null)
sax_apache.parse(input_source_apache, my_handler_apache);
final String xml_sun=my_handler_sun.toString();
final String xml_apache=my_handler_apache.toString();
assertNotNull(xml_sun);
assertNotNull(xml_apache);
System.out.println("xml version " + xml_version);
System.out.println("xml " + xml);
System.out.println("xml_orig " + xml_orig);
System.out.println("xml_sun " + xml_sun);
System.out.println("xml_apache " + xml_apache);
// test the data returned from DocumentHandler
if(sax_apache!=null)
assertEquals(xml_orig, xml_apache);
assertEquals(xml_orig.length(), xml_sun.length()); // length seems to be okay
assertEquals(xml_orig, xml_sun); // content seems to be not okay for XML 1.1
} -
Oracle xml v2 parser collapses xml element nodes
Hi,
Whenever I pass load an XML document and parse it using the DOMParser object, it collapses empty XML elements. Eg, if my XML file has the following element:
<firstname></firstname>, once it passes through the parser, it becomes <firstname/>!
How can I prevent this from happening? Is there some setting that I can set to stop it?
Urgent response required.
thanks!
neelamThis is an incorrect statement.
Whether the incoming document had:
<x>
or
<x></x>
All that will be reflected in the DOM model is the presence of an "X" Element. An Element does not have a value in the DOM model (anyElement.getNodeValue() ALWAYS returns null). In either case, to associate a child text node with the "X" element, you would have to:
1) Construct a new Text node
2) Call appendChild() to append the child text node to the "X" element
There is no semantic difference, in other words, between <x> and <x></x>
Maybe you are looking for
-
when I start firefox is says other version of firefox is running and tells me to close it. I hit ok and firefox comes on. there is no other version running?????
-
How do I reference a javascript file in a jar file
Hi all, I'm trying to reference a javascript file, which is contained in a jar file, from my html page. So far I have had no success : I saw a reference to the SCRIPT tag attribute ARCHIVE. Does this work for Internet Explorer 5? I tried using <SCRIP
-
Question on "Writing a Java Card applet" by Ed Ort
Hi, in the wallet apple i defined the variable short balance that is the wallet in the Sim, but i don't understand where the value of this variable is initialized the first time. Could someone help me? Thank you Luigi
-
Hi, I'm working in After Effects CS4, and I'm having a problem when I try to RAM preview short sections of an animation project. The RAM preview keeps stopping before it reaches the end of the work area, and beginning again. I'm pretty new to the pro
-
Help with where to find older activation codes
I am trying to find out where I can locate an activation code on my original purchase of Lightroom that I made a few years ago. I upgraded to Lightroom 4 a couple of months ago and had it installed on my laptop but I just recently bought a new deskt