2012-04-13 5 views
0

Ich habe die Codes unten. Statement 1 lädt eine XML-Datei mittlerer Größe (~ 300-400 KB) und speichert den Inhalt in einer String-Variablen (xmlContent). Nun wird die Aussage 2 den Wert der jsp Variable xmlContent auf die Javascript Variable xmlText setzen. Die Anweisung 3 wird versuchen, ein XMLDocument-Objekt in Javascript zu erstellen (Laden Sie die Zeichenfolge als XML-Dokument, damit sie über DOM-Methoden analysiert werden kann).Loading XML als String und Verwendung in JSP und Javascript

Ich muss sagen, dass die XML-Datei enthält sowohl einfache und doppelte Anführungszeichen darin und enthält auch Entitäten wie &***;. Warum gibt die dritte Anweisung null zurück? kann jemand erklären?

Kann mir jemand eine bessere Möglichkeit geben, die XML-Zeichenkette Daten zu übertragen, wie durch eine Kodierung/Entschlüsselung oder durch das Entkommen?

Danke.

<% 
String xmlContent = FileReader.readFile("/xml/books.xml"); 
%> 
<script type="text/javascript"> 
var xmlText = ' <% =xmlContent %> '; 
new DOMParser().parseFromString(xmlText, "text/xml"); 
//I know that it will not work in IE 
</script> 

Antwort

0

Wenn Ihr XML enthält new-line Zeichen (LF/CRLF) Sie werden sie sich nehmen oder entkommen sie in der Java-Code, bevor es dem Javascript-Code übergeben. Denken Sie daran, dass es auf der Javascript-Seite ist, als würde man eine literale Zeichenfolge eingeben. Wenn Ihr XML neue Zeilen enthält, ist es so, als ob Sie Ihre literale Zeichenfolge in mehrere Zeilen aufteilen würden.

Safer Bet ist das Suchen und Ersetzen neuer Zeilen in Ihrem XML mit Backslash-Newline, um die Zeilenumbrüche in Javascript zu umgehen und effektiv eine mehrzeilige Javascript-Zeichenfolge bereitzustellen. Dies funktioniert auch korrekt, wenn Sie in Ihrem XML-Code CDATA-Abschnitte mit Zeilenumbrüchen haben, die Sie behalten möchten. Einige Code:

xmlContent = xmlContent.replace("\n", "\\\n").replace("\r\n", "\\\r\n"); 
0

Wenn Sie das XML-Schema kennen (XSD, und es ändert sich nicht) Ich schlage vor, Sie JAXB zu verwenden. Sie können ein Servlet implementieren, das die XML-Datei verarbeitet und eine Bean an die JSP zurückgibt.