<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
FONT-SIZE: 9pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body class='hmmessage'>Hi,<BR>
&nbsp;<BR>
Tatu's mentioned a good point that my question not asked very clearly, I'm quite junior on both JDOM &amp; Java, please forgive me if I put something&nbsp;cannot be understood&nbsp;here.<BR>
&nbsp;<BR>
My XML is very simple, but I put the encoding as UTF-8 as if&nbsp;XMLOutputter can't display the wording correctly when I change encoding to "big5".<BR>
&nbsp;<BR>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<BR>&lt;?dsd href="zurich.dsd"?&gt;<BR>&lt;DB&gt;<BR>
&nbsp; &lt;Record&gt;<BR>&nbsp; &nbsp;&lt;ThxRegTxt&gt;Dollar Money Market 基金&lt;/ThxRegTxt&gt;<BR>&nbsp; &nbsp;&lt;NxtRegTxt&gt;Japanese Yen Money Market&lt;/NxtRegTxt&gt;<BR>&nbsp; &nbsp;&lt;InnerReg&gt;<BR>&nbsp; &nbsp;&nbsp;&lt;beg loop="2"&gt;SIZE=-2&amp;gt;&lt;/beg&gt;<BR>&nbsp; &nbsp;&nbsp;&lt;end loop="3"&gt;&amp;lt;/TD&amp;gt;&lt;/end&gt;<BR>&nbsp; &nbsp;&lt;/InnerReg&gt;<BR>&nbsp; &lt;/Record&gt;&nbsp; <BR>&lt;/DB&gt;<BR>
&nbsp;<BR>
This is the code I used to display my XML on the console, it works without any problem.<BR>
&nbsp;<BR>
&nbsp;&nbsp;&nbsp;try {<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document docXML = new SAXBuilder().build(new File(xmlPath));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Format format = outputter.getFormat();<BR>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;format.setEncoding("big5");<BR>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;outputter.setFormat(format);<BR>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;outputter.output(docXML, System.out);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch (IOException e) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;e.printStackTrace();<BR>&nbsp;&nbsp;&nbsp; &nbsp;}<BR>
&nbsp;<BR>
&nbsp;<BR>
Then I tried to use JDOM to load into the Vector.<BR>
&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Vector xmlRecVector = null;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlRecVector = new Vector();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;Document docXML = new SAXBuilder().build(new File(xmlPath)); // xmlPath is the path of the XML<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element rootElementList = docXML.getRootElement();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List recDBList = rootElementList.getChildren("Record");<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator i = recDBList.iterator();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int idxOfList = 0;<BR>
&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (i.hasNext()) {<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element recElement = (Element) i.next();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; idxOfList = recDBList.indexOf(recElement);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DbXmlHandlerBean recDBObj = new DbXmlHandlerBean(); //DbXmlHandlerBean is&nbsp;an external data type.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recDBObj.setRecIndex(idxOfList);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String s = recElement.getChild("ThxRegTxt").getText();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(s+" : " + s.length() + "\n"); // I used this to count number of character stored.<BR>
&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Store into my object, it works fine, you can ignore these codes.<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recDBObj.setNxtRegTxt(recElement.getChild("NxtRegTxt").getText());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recDBObj.setInnerRegBeg(recElement.getChild("InnerReg").getChild("beg").getText());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recDBObj.setInnerBegLoop(Integer.parseInt(recElement.getChild("InnerReg").getChild("beg").getAttributeValue("loop")));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recDBObj.setInnerRegEnd(recElement.getChild("InnerReg").getChild("end").getText());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recDBObj.setInnerEndLoop(Integer.parseInt(recElement.getChild("InnerReg").getChild("end").getAttributeValue("loop")));<BR>
&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Put store XML object into Vector<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlRecVector.add(recDBObj);<BR>
&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } // end of while loop<BR>
&nbsp;<BR>
&nbsp;<BR>
After I've stored the object, I display the whole vector&nbsp;object again.<BR>
&nbsp;<BR>
&nbsp;&nbsp;&nbsp;DbXmlHandlerBean recDBObj = new DbXmlHandlerBean();<BR>&nbsp;&nbsp;&nbsp;System.out.println("Print Stored Record...");<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;for (int i=0; i&lt;recVector.size(); i++) {&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recDBObj = (DbXmlHandlerBean) recVector.elementAt(i);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Record: " + recDBObj.getRecIndex());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Thx: " + recDBObj.getThxRegTxt() + "&nbsp; Nxt: " + recDBObj.getNxtRegTxt());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("InnerBeg: " + recDBObj.getInnerRegBeg() + " loop: " + recDBObj.getInnerBegLoop());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("InnerEnd: " + recDBObj.getInnerRegEnd() + " loop: " + recDBObj.getInnerEndLoop() + "\n");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;<BR>
But for this time, it can't display my stored text with correct big5 code, but for english only, it works fine.<BR>
&nbsp;<BR>
&nbsp;<BR>
I believe if the XMLOutputter can display out big5 information, even&nbsp;it should work&nbsp;by using SAXBuilder()&nbsp;for a&nbsp;Document object, the effect should be the same, but I think something that has been missed.<BR>I've no idea the mechanism of Xerces&nbsp;related to JDOM under&nbsp;JDK 1.5.&nbsp;Hope&nbsp;some professional can help me to solve this problem. Thanks.&nbsp;
&nbsp;<BR>
Regards,<BR>
Jacques.<BR><BR><BR>

<HR id=stopSpelling>
<BR>
&gt; Date: Tue, 1 Apr 2008 09:52:11 -0700<BR>&gt; From: cowtowncoder@yahoo.com<BR>&gt; Subject: Re: [jdom-interest] String length shorten after .getChild().getText() is being used.<BR>&gt; To: jdom-interest@jdom.org<BR>&gt; <BR>&gt; <BR>&gt; --- Jacques wong &lt;jacques_wong@hotmail.com&gt; wrote:<BR>&gt; <BR>&gt; &gt; Hi,<BR>&gt; &gt; I'm using JDOM v1.1. Basically, I can use most of<BR>&gt; &gt; the function of the JDOM, but I found some stranges<BR>&gt; &gt; when I use Element.getChild().getText(); I've an XML<BR>&gt; &gt; that contain some big5 characters (externally<BR>&gt; &gt; created XML file), both using XMLOutputter for<BR>&gt; &gt; outputting screen and XML file have no affection on<BR>&gt; &gt; the big5 codeset displays. However, when I tried to<BR>&gt; &gt; query each text one by one by using<BR>&gt; &gt; Element.getChild().getText(), the String returned<BR>&gt; &gt; always is shorter than the original in XMLfile, and<BR>&gt; &gt; the Big5 characters are displayed incorrectly. I<BR>&gt; &gt; tried to use the conversion. String s = new<BR>&gt; <BR>&gt; Shorter as measured by... ? Number of characters in<BR>&gt; it? Since JDOM is not a parser, encoding/decoding<BR>&gt; issues are dealt with by the underlying parser;<BR>&gt; default being Xerces when using JDK 1.5+.<BR>&gt; <BR>&gt; I doubt JDOM has anything to do with the problem. By<BR>&gt; the time it gets data from parser, it's all in java<BR>&gt; chars/Strings, decoded from input (byte stream<BR>&gt; usually) as necessary.<BR>&gt; But without a sample document it is impossible to know<BR>&gt; what exactly goes wrong.<BR>&gt; <BR>&gt; The most common error is that the encoding declaration<BR>&gt; in the xml document is wrong, and contents are encoded<BR>&gt; using some other encoding.<BR>&gt; Second common problem is developers printing out text<BR>&gt; to console, and console being unable to display it<BR>&gt; properly.<BR>&gt; <BR>&gt; &gt;<BR>&gt; String(recElement.getChild("ThxRegTxt").getText().getBytes("UTF-8"),"big5");<BR>&gt; &gt; but seems
 it's not displaying correctly also. My<BR>&gt; <BR>&gt; No kidding, that's about worst piece of code anyone<BR>&gt; could write. I wish compilers would refuse to compile<BR>&gt; it. :-p<BR>&gt; If it worked as expected, your input data was broken,<BR>&gt; and you were just lucky that 2 wrongs made right.<BR>&gt; <BR>&gt; -+ Tatu +-<BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; ____________________________________________________________________________________<BR>&gt; You rock. That's why Blockbuster's offering you one month of Blockbuster Total Access, No Cost. <BR>&gt; http://tc.deals.yahoo.com/tc/blockbuster/text5.com<BR>&gt; _______________________________________________<BR>&gt; To control your jdom-interest membership:<BR>&gt; http://www.jdom.org/mailman/options/jdom-interest/youraddr@yourhost.com<BR><BR><br /><hr />2 GB 超大容量 、簡易、高效率、強大安全防護 —  <a href='http://mail.live.com' target='_new'>立即升級 Windows Live Hotmail </a></body>
</html>