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 tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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