15. november 2010 - 16:25
Der er
23 kommentarer og 1 løsning
Decode/Encode
Hvordan er det lige jeg får decoded en String. Jeg kan gøre sådan her for alle tegn, men det er noget klodset output = output.replaceAll("<","<");
Annonceindlæg fra SoftwareOne
15. november 2010 - 16:33
#1
Hvis det er XML boer en XML parser haandtere det automatisk for dig.
15. november 2010 - 16:37
#2
Jeg gør sådan her String output = XPathAPI.selectSingleNode(trae, "etellerandet/text()").toString(); Det jeg modtager er encoded.
15. november 2010 - 16:50
#3
Min klasse ser på nuværende tidspunkt således ud. Jeg vil meget gerne have input til hvordan jeg optimerer den. public class Minklasse { public String getMininfo(String url) { HttpClient client = new HttpClient(); client.getHttpConnectionManager().getParams().setConnectionTimeout(1000); client.getHttpConnectionManager().getParams().setSoTimeout(5000); GetMethod method = new GetMethod(url); try{ client.executeMethod(method); } catch (Exception e){ } String s =""; try { s = "<all>"+method.getResponseBodyAsString()+"</all>"; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); Document trae = factory.newDocumentBuilder().parse(new InputSource(new StringReader(s))); Node n = XPathAPI.selectSingleNode(trae, "all/LADIDA/text()"); String output = n.toString(); output = output.replaceAll("<","<"); output = output.replaceAll(">",">"); output = output.replaceAll("<br />",""); return output; }catch (Exception e) { e.printStackTrace(); } return ""; } }
15. november 2010 - 16:51
#4
Hvad med: String output = XPathAPI.selectSingleNode(trae, "etellerandet/text()").getNodeValue(); ?
15. november 2010 - 17:05
#5
import java.io.StringReader; import javax.xml.parsers.DocumentBuilderFactory; import org.apache.xpath.XPathAPI; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.xml.sax.InputSource; public class Esc { public static void main(String[] args) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); Document trae = factory.newDocumentBuilder().parse(new InputSource(new StringReader("<all><foobar><bla bla></foobar></all>"))); Node n = XPathAPI.selectSingleNode(trae, "//all/foobar/text()"); System.out.print(n.getNodeValue()); } } udskriver korrekt <>.
15. november 2010 - 19:30
#6
cool nok. Jeg må lige prøve igen i morgen, må jo have gjort et eller andet forkert så. Læg endelig et svar så jeg kan lukke
15. november 2010 - 19:37
#7
svar
16. november 2010 - 09:51
#8
Det virker altså ikke. Jeg får det encodede resultat tilbage :-(
16. november 2010 - 15:44
#9
Ogsaa med mit lille standalone eksempel?
17. november 2010 - 09:55
#10
giver mig [#text: <bla bla>]
17. november 2010 - 09:59
#11
Det er sådan set ikke fordi jeg ikke kan få det til at virke :-) Det handler mere om jeg ikke syntes det er så kønt med en masse output = output.replaceAll("<","<"); Der må da være en mere elegant løsning.
17. november 2010 - 10:19
#12
Hvordan ligger jeg en metode ind som encoder for mig i Minklasse output = output.replaceAll("<","<"); output = output.replaceAll(">",">"); output = output.replaceAll("<br />","");
17. november 2010 - 11:06
#13
hvorfor kan jeg ikke gøre sådan her private String encode(String s){ s.replaceAll("<","<"); s.replaceAll(">",">"); s.replaceAll(""","\\\""); s.replaceAll("\\[",""); s.replaceAll("#cdata-section:",""); s.replaceAll("]",""); s.replaceAll("<br />",""); return s; } også kalde den med output = encode(output); Får at vide replaceAll bliver ignored
17. november 2010 - 12:12
#14
Har fundet ud af det det skal være s=s.replaceAll("<","<"); Kan jeg lægge HttpClient client = new HttpClient(); client.getHttpConnectionManager().getParams().setConnectionTimeout(1000); client.getHttpConnectionManager().getParams().setSoTimeout(5000); GetMethod method = new GetMethod(url); try{ client.executeMethod(method); } catch (Exception e){ } ud på en måde så jeg kan genbruge det i klassen. Jeg påtænker at have en del forskellige getMininfo metoder
18. november 2010 - 02:10
#15
Du kan altid pakke noget kode ind i en genbrugelig metode.
18. november 2010 - 02:11
#16
Men: [#text: <bla bla>] lyder altså meget som: n.toString() og ikke: n.getNodeValue()
18. november 2010 - 10:54
#17
Det er altså det sidste jeg gør. Det skal dog lige siges at metoden returnerer en String, så det kan jo være at JAVA hjælper mig :-) public String getMininfo(String url) {} Jeg har lavet min egen Decode metode private String decode(String s){ //Decode content in order for it to render correctly s=s.replaceAll("<","<"); s=s.replaceAll(">",">"); s=s.replaceAll(""","\\\""); return s.trim(); } som jeg bruger nu. Kan dog ikke forstå den funktionalitet ikke allerede findes. Det gør den vel også jeg kan bare ikke finde den :-)
29. november 2010 - 03:52
#18
29. november 2010 - 16:46
#19
Har kigget på det, men forstår ikke helt hvad jeg skal bruge det til :-(
30. november 2010 - 04:01
#20
30. november 2010 - 07:43
#21
jamen det vil jeg da prøve :-)
30. november 2010 - 10:34
#22
Bliver aldrig helt klog på det her burde return StringEscapeUtils.escapeXml(n.getNodeValue()); ikke gøre det samme som return decode(n.getNodeValue()); hvor decode er private String decode(String s){ s=s.replaceAll("<","<"); s=s.replaceAll(">",">"); s=s.replaceAll(""","\\\""); return s.trim(); } Jeg kan fortælle at det første ikke virker men heller ikke giver nogen fejl
30. november 2010 - 13:54
#23
Vor herre til hest return StringEscapeUtils.unescapeXml(n.getNodeValue()); er jo nok lidt smartere når det er det jeg gerne vil DOOOOOHHHHHH!!!! (ekko)
01. december 2010 - 01:38
#24
:-)
Kurser inden for grundlæggende programmering