DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=14360>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=14360 XPathAPI.selectSingleNode seems to truncate text node value Summary: XPathAPI.selectSingleNode seems to truncate text node value Product: XalanJ2 Version: 2.4 Platform: PC OS/Version: Windows NT/2K Status: NEW Severity: Major Priority: Other Component: org.apache.xpath AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] A DOM Node containing the following data is passed to a function that extracts the text value of the <FieldValue> element using XPathAPI: <Field> <FieldName>DateOfReading</FieldName> <FieldValue>2002-10-17T11:00:00-08:00</FieldValue> </Field> The following method does this extraction. Note where the debugging info is printed out by the "printSerialized(Node)" calls: public static String getFieldValue(Node fieldNode) throws XMLDataAccessorException { Node tempParentNode = null; Node tempChildNode = null; String fieldValue = ""; //Print entire Node printSerialized(fieldNode); System.out.println("\n"); try { //Use XPathAPI call to extract the appropriate node, using an XPath expression tempParentNode = XPathAPI.selectSingleNode(fieldNode,"FieldValue"); //Print <Field> Node printSerialized(tempParentNode); System.out.println("\n"); //Some error checking if (tempParentNode == null) throw new XMLDataAccessorException(); else { tempChildNode = XPathAPI.selectSingleNode(tempParentNode,"text()"); if (tempChildNode == null) fieldValue = ""; //if there's no text() node, the value is the empty string for our purposes (this is not an Exception) else fieldValue = tempChildNode.getNodeValue(); //Print <FieldValue> Node printSerialized(tempChildNode); System.out.println("\n"); } } catch (TransformerException te) { throw new XMLDataAccessorException();} // If all is well, return the value return fieldValue; } Running the method on the data produces the following debug output: <?xml version="1.0" encoding="UTF-8" standalone="no"?> <Field><FieldName>DateOfReading</FieldName><FieldValue>2002-10-17T11:00:00-08:00 </FieldValue></Field> <?xml version="1.0" encoding="UTF-8" standalone="no"?> <FieldValue>2002-10-17T11:00:00-08:00</FieldValue> <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2002- And "2002-" is returned from the method. Sometimes, these date values get truncated in different positions, but the same data produces the same truncation. Is this a configuration problem with the XPathAPI, an encoding problem with the data value, or indeed a bug? I'm also including the code for printSerialized(Node) in case it's relevant: static void printSerialized(Node theNode) { try { Serializer serializer = SerializerFactory.getSerializer (OutputProperties.getDefaultMethodProperties("xml")); serializer.setOutputStream(System.out); serializer.asDOMSerializer().serialize(theNode); } catch (IOException ioe) {ioe.printStackTrace();} }
