Xml document parse Exception
Hi,
when i am parsing the document having encoding scheme is US-ASCII
doc = docBuilder.parse(url);
it throws Exception :
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Byte "146" is not a member of the (7-bit) ASCII character set.
how can i resolve it ?
Read url and convert the String to bytes using UTF-8, which is the default character encoding for XML.
Similar Messages
-
Hy is there anyway to specify a base dir when parsing a document? Have a doctype defined that references a XML file but the file is relative to the parsing document.
Example :
<!DOCTYPE something [
<!ENTITY fileRef SYSTEM "file:./util/otherFile.xml">
]>
<something>
&fileRef ;
</something>
When parsing this document i get the following exception "java.io.FileNotFoundException: ./util/otherFile.xml (The system cannot find the path specified)". Though the file is in the specified directory.
Another question i have is if it's possible to make any reference to any system environment variables from within an XML document.
Thanx,
Daniel CampeloYes, call the setSystemId() method on the InputSource you are giving to the parser. Remember you have to give it a URI, not a path name. (The File class has a method to return the URI of a file path.)
And sure, you can refer to system environment variables in an XML document. Just don't expect those things to be treated any differently than any other text. If you want them to be replaced by the value of the environment variables, for example, you have to do that yourself. -
I have the java source code for a SAX compiler to parse my XML document.
To make this work I was told to include the following in my classpath: -
� j2sdk1.4.1_01/jaxp-1.1/jaxp.jar
� j2sdk1.4.1_01/jaxp-1.1/xalan.jar
� j2sdk1.4.1_01/jaxp-1.1/crimson.jar
by the way I have got j2sdk1.4.1_01!!
I have also got another java file which is a java class that calls my parser.java file. When I compile the java class file I get weird errors such as:
"Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion' has value '1.3', but '1.4' is required.
ERROR: could not find java.dll
ERROR: could not find Java 2 Runtime Environemnt.
This is the code for my java class:
import java.io.*;
import java.util.*;
public class testXML {
public static void main(final String[] pArgs) throws IOException {
new CustomerParser("flock.xml");
I'm pretty new to this parsing business, and Im really not sure what to do.
1)is it my java software playing up?
2)or is it my classpath?
3)or what?
hope someone can help, Jim.Find the old version of java.exe that's running and get rid of it. (or remove the pathe entry)
-
Hello I am doing some SOAP XML stuff and I am having an issue that hopefully I can get some help with.
Is XML like this valid to do in a SOAP message?
<prompt>1 &_lt_; 0? <prompt>It's suppose to represent "1 < 0?"
* the forum formatter seems to eat up my encoded text and transofrms it into acutal "<" so I am placing underscores "_" everywhere to keep the text. so above is actually without underscores
From what I've read I think it is. I have text like this transported as part of the overall SOAP message to my client from the server.
In my code I do:
// Create an instance of the DocumentBuilderFactory
DocumentBuilderFactory documentFactory = DocumentBuilderFactory.newInstance();
// Get the DocumentBuilder from the factory
DocumentBuilder builder = documentFactory.newDocumentBuilder();
Document doc = builder.parse(inputStream);
...inputStream is an InputStream (specifically ByteArrayInputStream) containing the XML.
The issue I am having is that wherever I have an '&' (such as "&_lt_;" or "&_gt_;" or "&" etc...) the parsing seems to get cut off and the rest of the string doesn't seem to get parsed. So the above string "1 &_lt_; 0?" ends up being "1 ".
Also is there an easy way to get back or rebuild the XML into a string from a Document object? I would really like to do that right after I do the parse method and see if the XML data that the Document object has is the same as what's in the inputStream (which is "1 &_lt_; 0?").
Any input you can provide is much appreciated. Thanks,
LatemHello I am doing some SOAP XML stuff and I am having an issue that hopefully I can get some help with.
Is XML like this valid to do in a SOAP message?
<prompt>1 &_lt_; 0? <prompt>It's suppose to represent "1 < 0?"
* the forum formatter seems to eat up my encoded text and transofrms it into acutal "<" so I am placing underscores "_" everywhere to keep the text. so above is actually without underscores
From what I've read I think it is. I have text like this transported as part of the overall SOAP message to my client from the server.
In my code I do:
// Create an instance of the DocumentBuilderFactory
DocumentBuilderFactory documentFactory = DocumentBuilderFactory.newInstance();
// Get the DocumentBuilder from the factory
DocumentBuilder builder = documentFactory.newDocumentBuilder();
Document doc = builder.parse(inputStream);
...inputStream is an InputStream (specifically ByteArrayInputStream) containing the XML.
The issue I am having is that wherever I have an '&' (such as "&_lt_;" or "&_gt_;" or "&" etc...) the parsing seems to get cut off and the rest of the string doesn't seem to get parsed. So the above string "1 &_lt_; 0?" ends up being "1 ".
Also is there an easy way to get back or rebuild the XML into a string from a Document object? I would really like to do that right after I do the parse method and see if the XML data that the Document object has is the same as what's in the inputStream (which is "1 &_lt_; 0?").
Any input you can provide is much appreciated. Thanks,
Latem -
Parse and output XML document while preserving attribute order
QUESTION: How can I take in an element with attributes from an XML and output the same element and attributes while preserving the order of those attributes?
The following code will parse and XML document and generate (practically) unchanged output. However, all attributes are ordered a-z
Example: The following element
<work_item_type work_item_db_site="0000000000000000" work_item_db_id="0" work_item_type_code="3" user_tag_ident="Step" name="Work Step" gmt_last_updated="2008-12-31T18:00:00.000000000" last_upd_db_site="0000000000000000" last_upd_db_id="0" rstat_type_code="1">
</work_item_type>is output as:
<work_item_type gmt_last_updated="2008-12-31T18:00:00.000000000" last_upd_db_id="0" last_upd_db_site="0000000000000000" name="Work Step" rstat_type_code="1" user_tag_ident="Step" work_item_db_id="0" work_item_db_site="0000000000000000" work_item_type_code="3">
</work_item_type>As you may notice, there is no difference in these besides order of the attributes!
I am convened that the problem is not in the stylesheet.xslt but if you are not then it is posted bellow.
Please, someone help me out with this! I have a feeling the solution is simple
The following take the XML from source.xml and outputs it to DEST_filename with attributes in a-z order
Code:
private void OutputFile(String DEST_filename, String style_filename){
//StreamSource stylesheet = new StreamSource(style_filename);
try{
File dest_file = new File(DEST_filename);
if(!dest_file.exists())
dest_file.createNewFile();
TransformerFactory tranFactory = TransformerFactory.newInstance();
Transformer aTransformer = tranFactory.newTransformer();
aTransformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
Source src = new DOMSource("source.xml");
Result dest = new StreamResult(dest_file);
aTransformer.transform(src, dest);
System.out.println("Finished");
catch(Exception e){
System.err.print(e);
System.exit(-1);
}You can't. The reason is, the XML Recommendation explicitly says the order of attributes is not significant. Therefore conforming XML serializers won't treat it as if it were significant.
If you have an environment where you think that the order of attributes is significant, your first step should be to reconsider. Possibly it isn't really significant and you are over-reaching in some way. Or possibly someone writing requirements is ignorant of this fact and the requirement can be discarded.
Or possibly your output is being given to somebody else who has a defective parser which expects the attributes to be in a particular order. You could quote the XML Recommendation to those people but often XML bozos are resistant to change. If you're stuck writing for that parser then you'll have to apply some non-XML processing to your output to fix it up on their behalf. -
Parseing an XML Document as a String
Hi all,
i am trying to parse an XML document to a parser. I get the file as a request parameter, which is filled in to at String variable.
But for some reason i get an SAXException, does anyone se the problem?
Thank you for your help...
Below is the code
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.text.*;
import java.net.*;
import java.net.URL;
import java.sql.*;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import javax.xml.parsers.*;
import javax.xml.transform.stream.StreamSource;
public class StartServlet extends HttpServlet
private boolean debug = true;
private final static String CONTENT = "content";
private final static String COOKIES = "cookies";
String resp = new String();
private static String NODE_TYPES[] = new String[] {
"ELEMENT",
"ATTRIBUTE",
"TEXT",
"CDATA_SECTION",
"ENTITY_REFERENCE",
"ENTITY",
"PROCESSING_INSTRUCTION",
"COMMENT",
"DOCUMENT",
"DOCUMENT_TYPE",
"DOCUMENT_FRAGMENT",
"NOTATION" };
public static void println(String s, int indent) {
for(int i = 0 ; i < indent; i++) {
System.out.println(" ");
System.out.println(s);
public static void println(String s) {
System.out.println(s);
public static void print(Node node){
printImpl(node, 0);
public static void printImpl(Node node, int indent){
if(node == null) {
return;
String nodeType = NODE_TYPES[node.getNodeType()];
String nodeName = node.getNodeName();
String nodeValue = node.getNodeValue();
if(nodeValue != null) {
nodeValue = nodeValue.trim();
if(nodeType.equals("TEXT") && nodeValue.equals("")) {
; //Ignore emty node
else {
println(nodeType + " - " + nodeName + " - " + nodeValue, indent);
NamedNodeMap attributes = node.getAttributes();
if (attributes != null) {
for(int i = 0; i < attributes.getLength(); i++) {
printImpl(attributes.item(i), indent + 1);
NodeList children = node.getChildNodes();
if(children != null) {
for(int i = 0; i < children.getLength(); i++){
printImpl(children.item(i), indent + 1);
public static DocumentBuilder newBuilder(boolean validation)
throws ParserConfigurationException {
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setValidating(validation);
domFactory.setNamespaceAware(true);
DocumentBuilder domBuilder = domFactory.newDocumentBuilder();
//domBuilder.setErrorHandler(new PrintErrorHandler());
return domBuilder;
public static Document newDocument()
throws ParserConfigurationException{
DocumentBuilder domBuilder = newBuilder(false);
Document document = domBuilder.newDocument();
return document;
public static Document parse( String xml, boolean validation)
throws ParserConfigurationException, IOException, SAXException {
DocumentBuilder domBuilder = newBuilder(validation);
Document document = domBuilder.parse(xml);
return document;
public void init() {
public void service( javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse res) {
String[] cookies = null;
try{
Hashtable document = getDocument("http://.../first.xml", cookies);
resp = (String) document.get(CONTENT);
debug(resp);
print(parse(resp, false));
catch (SAXParseException e){
System.out.println("Saxfejl");
//System.exit(1);
catch (Exception e){
e.printStackTrace();
System.exit(1);
public void debug(String msg) {
if(debug) {
System.out.println(msg);
public void performTask(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) {
try
// Insert user code from here.
catch(Throwable theException)
// uncomment the following line when unexpected exceptions
// are occuring to aid in debugging the problem.
//theException.printStackTrace();
public void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException {
performTask(request, response);
public void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException {
performTask(request, response);
private Hashtable getDocument(String urlCode, String[] oldCookies) {
Hashtable document = new Hashtable();
HttpURLConnection http = null;
try {
URL httpURL = new URL(urlCode);
// If HTTP Protocol, then open connection using the Request method indicated
URLConnection conn = httpURL.openConnection();
http = (HttpURLConnection) conn;
//http.setRequestMethod("GET");
http.setDoInput(true);
http.setDoOutput(true);
http.setUseCaches(false);
http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
if (oldCookies != null) {
for (int j = 0; j < oldCookies.length; j++) {
String cookie = oldCookies[j];
http.setRequestProperty("Cookie", cookie);
http.connect();
http.getContent();
StringBuffer tsb = new StringBuffer("");
if (http.getResponseCode() == 200) {
InputStream cis = http.getInputStream();
byte[] a = new byte[1024];
int n = cis.read(a);
while (n >= 0) {
tsb.append(new String(a, 0, n));
n = cis.read(a);
cis.close();
document.put(CONTENT, tsb.toString());
String[] cookies = null;
if (cookies == null) {
int headerFieldIndex = 0;
String headerFieldValue = http.getHeaderField(headerFieldIndex);
Vector cookieValues = new Vector();
while (headerFieldValue != null) {
String headerFieldName = http.getHeaderFieldKey(headerFieldIndex);
if ((headerFieldName != null) && headerFieldName.toLowerCase().equals("set-cookie")) {
int index = headerFieldValue.indexOf(";");
if (index > -1) {
headerFieldValue = headerFieldValue.substring(0, index);
cookieValues.addElement(headerFieldValue);
headerFieldValue = http.getHeaderField(++headerFieldIndex);
cookies = new String[cookieValues.size()];
cookieValues.copyInto(cookies);
document.put(COOKIES, cookies);
catch (Exception e) {
debug("url problem" + e);
finally {
if (http != null) {
http.disconnect();
return document;
}Hi,
Use this code it will helpful to you.
resultXMLDocument=(XmlDocument)documentDoc;
StringWriter sw = new StringWriter();
resultXMLDocument.write((Writer) sw);
xmlString=sw.toString();
thnaks,
suneel -
How to parse multiple xml documents from single buffer
Hello,
I am trying to use jaxb 2.0 to parse a buffer which contains multiple xml documents. However, it seems that it is meant to only parse a single document at a time and throws an exception when it gets to the 2nd document.
Is there a way I can tell jaxb to only parse the first complete document and not fetch the next one out of the buffer? Or what is the most efficient way to separate the buffer into two documents without parsing it manually. If I have to search the buffer for the next document root and then split the buffer, it seems like that defeats the purpose of using jaxb as the parser.
I am using the Unmarshaller.unmarshall method and the exception I am getting is:
org.xml.sax.SAXParseException: Illegal character at end of document, <.]
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(AbstractUnmarshallerImpl.java:315)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.createUnmarshalException(UnmarshallerImpl.java:476)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:198)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:167)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:184)
Thank you for your helpIt's just like any other XML parser, it's only designed to parse one XML document. If you have something that concatenates two XML documents together (that's what your "buffer" sounds like), then stop doing that.
-
Parse an Aggregate in XML Document using PL/SQL
Hi. I've been successful with parsing a TAG in XML Document stored in CLOB using PL/SQL XML Parser.
However, I need help on how to get the whole aggregate in XML Document stored in CLOB.
sample XML Doc :
<library>
<book>
<title>Oracle Complete Reference</title>
<author>Kevin</Author>
<year>2000</year>
</book>
<video>
<title>Learning C++</title>
<length>2 hours</length>
<video>
</library>
I need a function that will accept an Input which is the aggregate name and will return the aggregate value.
With the sample XML above, say the input is 'VIDEO', the function will return :
<video>
<title>Learning C++</title>
<length>2 hours</length>
<video>
I'll really appreciate any help.
nullI used such an example to parse several Varchar2 strings in a given DB session:
BEGIN
parser := xmlparser.newparser ;
xmlparser.parsebuffer(parser,xmlout) ;
domdoc := xmlparser.getDocument(parser) ;
xmlparser.FREEPARSER(parser) ;
parser.id := -1 ;
nodes := xslprocessor.selectNodes(
xmldom.makenode(domdoc),
'Positionen/Position') ;
for i in 1 .. xmldom.getLength(nodes) loop
node := xmldom.item(nodes,i-1) ;
-- do s/thing with the node
end loop ;
xmldom.freedocument(domdoc) ;
RETURN(komponenten) ;
EXCEPTION
WHEN OTHERS THEN
if parser.id <> -1 then xmlparser.freeparser(parser) ;
end if ;
if domdoc.id <> -1 then xmldom.freedocument(domdoc) ;
end if ;
RAISE ;
END ;
However, after about 2000 of nodes lists parsed, I get an ArrayIndexOutOfBoundsException from XMLNodeCover. Obviously, I should release the nodes or the nodelist, but I have not found any procedure to do this.
Pascal -
How to parse an XML document with oracle8i
Has anyone a good link or an example how to decode and store an XML document into an oracle8i database.
I' ve found only good things for oracle9i.
Thank you
RogerHere is an example of parsing xml taken fro Oracle8i 8.1.7 xdk.
This one uses external OS files to pase, but could be easily converted to
use CLOB or VARCHAR2 string for parsing XML documents.
IF you wanted to use CLOB to store and manipulate xml documents you can use XMLParser and XMLDom
packages along with the DBMS_LOB package to do that.
-- This file demonstates a simple use of the parser and DOM API.
-- The XML file that is given to the application is parsed and the
-- elements and attributes in the document are printed.
-- The use of setting the parser options is demonstrated.
set serveroutput on;
create or replace procedure domsample(dir varchar2, inpfile varchar2,
errfile varchar2) is
p xmlparser.parser;
doc xmldom.DOMDocument;
-- prints elements in a document
procedure printElements(doc xmldom.DOMDocument) is
nl xmldom.DOMNodeList;
len number;
n xmldom.DOMNode;
begin
-- get all elements
nl := xmldom.getElementsByTagName(doc, '*');
len := xmldom.getLength(nl);
-- loop through elements
for i in 0..len-1 loop
n := xmldom.item(nl, i);
dbms_output.put(xmldom.getNodeName(n) || ' ');
end loop;
dbms_output.put_line('');
end printElements;
-- prints the attributes of each element in a document
procedure printElementAttributes(doc xmldom.DOMDocument) is
nl xmldom.DOMNodeList;
len1 number;
len2 number;
n xmldom.DOMNode;
e xmldom.DOMElement;
nnm xmldom.DOMNamedNodeMap;
attrname varchar2(100);
attrval varchar2(100);
begin
-- get all elements
nl := xmldom.getElementsByTagName(doc, '*');
len1 := xmldom.getLength(nl);
-- loop through elements
for j in 0..len1-1 loop
n := xmldom.item(nl, j);
e := xmldom.makeElement(n);
dbms_output.put_line(xmldom.getTagName(e) || ':');
-- get all attributes of element
nnm := xmldom.getAttributes(n);
if (xmldom.isNull(nnm) = FALSE) then
len2 := xmldom.getLength(nnm);
-- loop through attributes
for i in 0..len2-1 loop
n := xmldom.item(nnm, i);
attrname := xmldom.getNodeName(n);
attrval := xmldom.getNodeValue(n);
dbms_output.put(' ' || attrname || ' = ' || attrval);
end loop;
dbms_output.put_line('');
end if;
end loop;
end printElementAttributes;
begin
-- new parser
p := xmlparser.newParser;
-- set some characteristics
xmlparser.setValidationMode(p, FALSE);
xmlparser.setErrorLog(p, dir || '/' || errfile);
xmlparser.setBaseDir(p, dir);
-- parse input file
xmlparser.parse(p, dir || '/' || inpfile);
-- get document
doc := xmlparser.getDocument(p);
-- Print document elements
dbms_output.put('The elements are: ');
printElements(doc);
-- Print document element attributes
dbms_output.put_line('The attributes of each element are: ');
printElementAttributes(doc);
-- deal with exceptions
exception
when xmldom.INDEX_SIZE_ERR then
raise_application_error(-20120, 'Index Size error');
when xmldom.DOMSTRING_SIZE_ERR then
raise_application_error(-20120, 'String Size error');
when xmldom.HIERARCHY_REQUEST_ERR then
raise_application_error(-20120, 'Hierarchy request error');
when xmldom.WRONG_DOCUMENT_ERR then
raise_application_error(-20120, 'Wrong doc error');
when xmldom.INVALID_CHARACTER_ERR then
raise_application_error(-20120, 'Invalid Char error');
when xmldom.NO_DATA_ALLOWED_ERR then
raise_application_error(-20120, 'Nod data allowed error');
when xmldom.NO_MODIFICATION_ALLOWED_ERR then
raise_application_error(-20120, 'No mod allowed error');
when xmldom.NOT_FOUND_ERR then
raise_application_error(-20120, 'Not found error');
when xmldom.NOT_SUPPORTED_ERR then
raise_application_error(-20120, 'Not supported error');
when xmldom.INUSE_ATTRIBUTE_ERR then
raise_application_error(-20120, 'In use attr error');
end domsample;
show errors; -
I would like to parse an xml document using xpath, see:
http://www.onjava.com/pub/a/onjava/2005/01/12/xpath.html
however, in the documentation (in the link above), it states that I need J2SE 5.0.
Currently, I have:
$ java -version
java version "1.5.0_11"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_11-b03)
Java HotSpot(TM) Client VM (build 1.5.0_11-b03, mixed mode, sharing)
Does that mean that I really have to install J2SE 5.0 in order to use J2SE 5.0's XPath support? Does anybody know anything about getting started with XPath, and whether I can just use my existing version of Java? I've never used XPath.
For more documentation, one can view:
http://www.w3.org/TR/xpath20/
Thank you.I have copied the code for the xpath tutorial on
http://www.onjava.com/pub/a/onjava/2005/01/12/xpath.html
exactly as it is on the tutorial, and imported the correct jars (I think).
But still my code is giving lots of errors!
Granted its my first shot but anyway here's the code and the errors...
package test;
import org.jdom.xpath.*;
import java.io.*;
import javax.xml.xpath.*;
public class XPath {
public static void main (String [] args){
XPathFactory factory = XPathFactory.newInstance();
XPath xPath=factory.newXPath();
XPathExpression xPathExpression=xPath.compile("/catalog/journal/article[@date='January-2004']/title");
File xmlDocument = new File("/home/myrmen/workspace/Testing/test/catalog.xml");
//FileInputStream fis = new FileInputStream(xmldocument);
InputSource inputSource = new InputSource(new FileInputStream(xmlDocument));
String title = xPathExpression.evaluate(inputSource);
String publisher = xPath.evaluate("/catalog/journal/@publisher", inputSource);
String expression="/catalog/journal/article";
NodeSet nodes = (NodeSet) xPath.evaluate(expression, inputSource, XPathConstants.NODESET);
NodeList nodeList=(NodeList)nodes;
SAXBuilder saxBuilder = new SAXBuilder("org.apache.xerces.parsers.SAXParser");
org.jdom.Document jdomDocument = saxBuilder.build(xmlDocument);
org.jdom.Attribute levelNode = (org.jdom.Attribute)(XPath.selectSingleNode(jdomDocument,"/catalog//journal[@title='JavaTechnology']" + "//article[@date='January-2004']/@level"));
levelNode.setValue("Intermediate");
org.jdom.Element titleNode = (org.jdom.Element) XPath.selectSingleNode( jdomDocument,"/catalog//journal//article[@date='January-2004']/title");
titleNode.setText("Service Oriented Architecture Frameworks");
java.util.List nodeList = XPath.selectNodes(jdomDocument,"/catalog//journal[@title='Java Technology']//article");
Iterator iter=nodeList.iterator();
while(iter.hasNext()) {
org.jdom.Element element = (org.jdom.Element) iter.next();
element.setAttribute("section", "Java Technology");
XPath xpath = XPath.newInstance("/catalog//journal:journal//article/@journal:level");
xpath.addNamespace("journal", "http://www.w3.org/2001/XMLSchema-Instance");
levelNode = (org.jdom.Attribute) xpath.selectSingleNode(jdomDocument);
levelNode.setValue("Advanced");
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Type mismatch: cannot convert from XPath to XPath
The method compile(String) is undefined for the type XPath
InputSource cannot be resolved to a type
InputSource cannot be resolved to a type
NodeSet cannot be resolved to a type
NodeSet cannot be resolved to a type
NodeList cannot be resolved to a type
NodeList cannot be resolved to a type
SAXBuilder cannot be resolved to a type
SAXBuilder cannot be resolved to a type
The method selectSingleNode(Document, String) is undefined for the type XPath
The method selectSingleNode(Document, String) is undefined for the type XPath
Duplicate local variable nodeList
The method selectNodes(Document, String) is undefined for the type XPath
Iterator cannot be resolved to a type
The method newInstance(String) is undefined for the type XPath
The method addNamespace(String, String) is undefined for the type XPath
The method selectSingleNode(Document) is undefined for the type XPath
at test.XPath.main(XPath.java:12) -
I didn't find a method that parses a XML document when it's not a file. I have a String that I want to parse and the method DocumentBuilder.parse only accepts a String that is a uri to a file.
I write this code:
String strXML = "<?xml version='1.0' ?><root><node>anything</node></root>";
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
domDoc = docBuilder.parse(strXML);
Please gimme a light!!
[]'s
SauloI have a similar problem, I'm trying to do the same BUT in a servlet, it compiles and it actually works if I use it outside my servlet, but, when I mount the servlet with the code similar to this one here it doesn't read the string (at least that's what appears to be, because it doesn't writes to my DB as it should and it doesn't display anything as I'm specifying as my servlet response). Any help? I'm posting my code here:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.w3c.dom.*;
import org.apache.xml.serialize.*;
import java.net.URLDecoder;
import java.sql.*;
import org.xml.sax.InputSource;
import java.io.StringReader;
public class SMSConnector extends HttpServlet
//Public variables we will need
public String Stringid;
public String Stringpath;
public String st;
public int nid;
//Servlet service method, which permits listening of events
public void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
//Initialization for the servlet
ServletOutputStream salida = res.getOutputStream();
ServletInputStream entrada = req.getInputStream();
//Reading of the entering string
BufferedReader lector = new BufferedReader(new InputStreamReader (entrada));
res.setContentType("text/HTML");
try {
//Database handler
Class.forName("org.gjt.mm.mysql.Driver");
//DocumentBuilderFactory factory =
//DocumentBuilderFactory.newInstance();
//DocumentBuilder builder = factory.newDocumentBuilder();
InputSource inStream = new InputSource();
inStream.setCharacterStream(new StringReader(lector.readLine()));
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc1 = docBuilder.parse(inStream);
NodeList listasms = doc1.getElementsByTagName("sms");
for(int s=0; s<listasms.getLength() ; s++)
Connection Conn = DriverManager.getConnection ("jdbc:mysql://localhost:3306/smsdb","root", "");
Node nodosms = listasms.item(s);
if(nodosms.getNodeType() == Node.ELEMENT_NODE){
Element elementosms = (Element)nodosms;
NodeList listatelf = elementosms.getElementsByTagName("tlf");
Element elementotelf = (Element)listatelf.item(0);
NodeList textTelfList = elementotelf.getChildNodes();
String telefono = ((Node)textTelfList.item(0)).getNodeValue();
//String SendingAddress = ((Node)textAddressList.item(0)).getNodeValue().trim();
salida.println(telefono);
NodeList listaop = elementosms.getElementsByTagName("op");
Element elementoop = (Element)listaop.item(0);
NodeList textOpList = elementoop.getChildNodes();
String operadora = ((Node)textOpList.item(0)).getNodeValue();
NodeList listasc = elementosms.getElementsByTagName("sc");
Element elementosc = (Element)listasc.item(0);
NodeList textSCList = elementosc.getChildNodes();
String shortcode = ((Node)textSCList.item(0)).getNodeValue();
NodeList listabody = elementosms.getElementsByTagName("body");
Element elementobody = (Element)listabody.item(0);
NodeList textBodyList = elementobody.getChildNodes();
String body = ((Node)textBodyList.item(0)).getNodeValue();
Statement sta = Conn.createStatement();
sta.executeUpdate("INSERT INTO smstable (telf,op,sc,body) VALUES ('" + telefono + "','" + operadora + "','" + shortcode + "','" + body + "')");
Conn.commit();
Conn.close(); }
//Catching errors for the SAX and XML parsing
catch (SAXParseException err)
System.out.println ("** Parsing error" + ", line " + err.getLineNumber () + ", uri " + err.getSystemId ());
System.out.println(" " + err.getMessage ());
catch (SAXException e)
Exception x = e.getException ();
((x == null) ? e : x).printStackTrace ();
catch (Throwable t)
t.printStackTrace ();
} -
Issue with parsing an xml document and namespaces
I am having an issue when parsing an xml document that includes a namespace.
Here is my xml:
<?xml version="1.0" encoding="utf-8"?>
<StatusFile xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" TxCnt="247" TxTotal="5756845.31" SourceId="3" xmlns="http://www.test.com/cig/payments/optimizer/status/2004/10/">
<Tx PmtId="350031" Amt="16739" TxSts="09" CustSts="04" ChkNum="10605770" />
<Tx PmtId="350990" Amt="31698.66" TxSts="09" CustSts="04" ChkNum="10605821" />
<Tx PmtId="354992" Amt="201320.08" TxSts="09" CustSts="04" />
<Tx PmtId="349277" Amt="6675.17" TxSts="09" CustSts="04" ChkNum="10605822" />
<Tx PmtId="354979" Amt="66949.75" TxSts="09" CustSts="04" ChkNum="10605823" />
<Tx PmtId="349341" Amt="63258.49" TxSts="09" CustSts="04" ChkNum="10605824" />
<Tx PmtId="350025" Amt="5866.04" TxSts="09" CustSts="04" ChkNum="10605830" />
<Tx PmtId="350024" Amt="15671.8" TxSts="09" CustSts="04" ChkNum="10605831" />
<Tx PmtId="346822" Amt="9880.64" TxSts="09" CustSts="04" />
<Tx PmtId="350023" Amt="1360" TxSts="09" CustSts="04" />
<Tx PmtId="349802" Amt="131267" TxSts="09" CustSts="04" ChkNum="10605832" />
<Tx PmtId="343573" Amt="14532.76" TxSts="09" CustSts="04" ChkNum="10605833" />
<Tx PmtId="352675" Amt="4436" TxSts="09" CustSts="04" />
<Tx PmtId="350022" Amt="1260" TxSts="09" CustSts="04" ChkNum="10605834" />
<Tx PmtId="349714" Amt="80778" TxSts="09" CustSts="04" ChkNum="10605835" />
<Tx PmtId="352676" Amt="10136" TxSts="09" CustSts="04" ChkNum="10605836" />
<Tx PmtId="352679" Amt="25511.69" TxSts="09" CustSts="04" ChkNum="10605837" />
<Tx PmtId="346502" Amt="12842.69" TxSts="10" CustSts="05" />
<Tx PmtId="346503" Amt="4232.61" TxSts="09" CustSts="04" ChkNum="10605838" />
</StatusFile>
Here is my current code base:
CREATE OR REPLACE PROCEDURE ParseXML(xml VARCHAR2) IS
myParser xmlparser.parser := xmlparser.newparser;
myDoc xmldom.DOMNode;
myNodes xmldom.DOMNodeList;
myElement xmldom.DOMElement;
trec NDE_CIG_STATUS_TRANSACTIONS%ROWTYPE;
BEGIN
xmlparser.parseBuffer(myParser,xml);
myDoc := xmldom.makeNode(xmlparser.getDocument(myParser));
myNodes := xslprocessor.selectNodes(myDoc,'//Tx');
FOR i IN 0..xmldom.getLength(myNodes)-1 LOOP
myElement := xmldom.makeElement(xmldom.item(buyOrders,i));
trec.pmt_id := xmldom.getAttribute(curBuy,'PmtId');
INSERT INTO NDE_CIG_STATUS_TRANSACTIONS(PMT_ID) VALUES (trec.pmt_id);
END LOOP;
COMMIT;
END ParseXML;
If I remove the namespace, everything works just fine. The issue is that I cannot remove the namespace.
Anyone have any suggestions on how I can get the xslprocessor.selectNodes to recognize my namespace?
Thanks,
Mark MoranEveryone,
Well after lots of hours spent reading web pages and blogs, etc... I was able to re-write my procedure and get it to work with different calls.
Here is my updated code.
PROCEDURE PARSE_STATUS_XML(P_FILE_NAME IN VARCHAR2, P_XML_FILE IN CLOB) IS
V_PARSER XMLPARSER.PARSER := XMLPARSER.NEWPARSER;
V_DOCUMENT XMLDOM.DOMDOCUMENT;
V_NODES XMLDOM.DOMNODELIST;
V_ELEMENT XMLDOM.DOMELEMENT;
V_TBL_RECORD NDE_CIG_STATUS_TRANSACTIONS%ROWTYPE;
BEGIN
XMLPARSER.PARSECLOB(V_PARSER, P_XML_FILE);
V_DOCUMENT := XMLPARSER.GETDOCUMENT(V_PARSER);
V_ELEMENT := XMLDOM.GETDOCUMENTELEMENT(V_DOCUMENT);
V_NODES := XMLDOM.GETELEMENTSBYTAGNAME(V_ELEMENT,'Tx','http://www.test.com/cig/payments/optimizer/status/2004/10/');
FOR I IN 0..XMLDOM.GETLENGTH(V_NODES)-1 LOOP
V_ELEMENT := XMLDOM.MAKEELEMENT(XMLDOM.ITEM(V_NODES,I));
V_TBL_RECORD.PMT_ID := XMLDOM.GETATTRIBUTE(V_ELEMENT,'PmtId');
V_TBL_RECORD.PMT_AMT := XMLDOM.GETATTRIBUTE(V_ELEMENT,'Amt');
V_TBL_RECORD.E_STATUS_CODE := XMLDOM.GETATTRIBUTE(V_ELEMENT,'TxSts');
V_TBL_RECORD.E_REASON_CODE := XMLDOM.GETATTRIBUTE(V_ELEMENT,'StsRsn');
V_TBL_RECORD.E_CUSTOMER_STATUS_CODE := XMLDOM.GETATTRIBUTE(V_ELEMENT,'CustSts');
V_TBL_RECORD.UPS_TRACKING_NBR := XMLDOM.GETATTRIBUTE(V_ELEMENT,'UpsTrcNum');
V_TBL_RECORD.FED_REFERENCE_NBR := XMLDOM.GETATTRIBUTE(V_ELEMENT,'FedRefNum');
V_TBL_RECORD.FIDB_TRACKING_NBR := XMLDOM.GETATTRIBUTE(V_ELEMENT,'FIDbtTrcNum');
V_TBL_RECORD.CHECK_NBR := XMLDOM.GETATTRIBUTE(V_ELEMENT,'ChkNum');
INSERT INTO NDE_CIG_STATUS_TRANSACTIONS(
CREATE_DATE,
XML_FILE_NAME,
PMT_ID,
PMT_AMT,
E_STATUS_CODE,
E_REASON_CODE,
E_CUSTOMER_STATUS_CODE,
UPS_TRACKING_NBR,
FED_REFERENCE_NBR,
FIDB_TRACKING_NBR,
CHECK_NBR
VALUES (
SYSDATE,
P_FILE_NAME,
V_TBL_RECORD.PMT_ID,
V_TBL_RECORD.PMT_AMT,
V_TBL_RECORD.E_STATUS_CODE,
V_TBL_RECORD.E_REASON_CODE,
V_TBL_RECORD.E_CUSTOMER_STATUS_CODE,
V_TBL_RECORD.UPS_TRACKING_NBR,
V_TBL_RECORD.FED_REFERENCE_NBR,
V_TBL_RECORD.FIDB_TRACKING_NBR,
V_TBL_RECORD.CHECK_NBR
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
RAISE;
END PARSE_STATUS_XML;
Mark -
Hi All,
We have a scenario of FTP-->PI---> Webservice. While triggering the data in the FTP, it is failing in the PI with the below error
SOAP: response message contains an error XIAdapter/PARSING/ADAPTER.SOAP_EXCEPTION - soap fault: Server was unable to read request. ---> There is an error in XML document (1, 447). ---> Input string was not in a correct format.
Can you please help?Hi Raja- It seems to be a data quality issue.
Check for the value @ 1447 position in the xml message that you are trying to send to web service..
may be a date filed/decimal value which is not in expected format. -
Hi folks,
I am using a cascaded mapping in my OM. I have a graphical mapping followed by the Java mapping. It is a flat file to IDOC mapping. Everything works fine in Dev but when I transport the same objects to QA, the Operation mapping though it doesn't fail in ESR testing tool, gives the following message and there is no output generated for the same payload which is successfully tested in DEV. Please advise on what could be the possible reasons.
Unable to display tree view; Error when parsing an XML document (Premature end of file.)kalyan,
There seems to be an invalid xml payload which causes this error in ESR not generating the tree view. Please find the similar error screenshot and rectify the payload.
Mutti -
Parsing an xml document inside a Thread
Hi Friends
I have to do some processing in my application for which i need to use multithreading.
Inside every new thread created i have to parse an xml document using s parsing tool like castor or jibx.
My question is that is it possible to parse a xml document inside a new thread everytime it gets created.
is it a good coding practice as it involves java code to do it.
Thanks
Vikengvikeng wrote:
Hi
Thanks for the reply.
Well i need to do some kind of a batch processing in my application.
I need to parse an xml document and upload the data i get after parsing into columns in the database.
Since its a batch what i was asking was is it possible to do it for every request as batch needs to handle hundreds of records during the daily or nightly sync.
Is it a good practice to do parsing for every record in a batch
Thanks
VikengI don't get it. One batch is one document, and that document contains e.g. 100 records? What's one request? A request for one batch? I would execute one batch in one thread.
Kaj
Maybe you are looking for
-
I am having a very difficult time with accessing my music from the cloud. I need to have itunes open on my laptop in order for it to work. And as soon as I close out itunes on my laptop, it gives me a warning that all users will be logged out. Hel
-
NFe 3.10 Devolução com mais de uma NFe referenciada
Caros, Estamos realizando o teste para o cenário de Devolução utilizando o layout do XML 3.10 através da NF-e. O manual técnico (NT2013.005_v1.03.pdf), em sua página 46, dá a entender que podem ser refenciadas várias NFes a serem devolvidas em uma ún
-
Itunes quicktime error # -2093
I cant use itunes because of this error... i've tried installing them separately but nothing works... can anyone help?
-
I have used InDesign in the past, paying on a month to month plan, and I am in need of the program again for another several months or so. When logging into my Adobe account to renew my license I saw offers for a 30 day free trial so I followed the l
-
What is meant by debugging? and the procedure of debugging?
what is meant by debugging? and the procedure of debugging?