Próbuję renderować xml na stronie VF z contentType="text/xml" ale otrzymuję błąd w Chrome

tutaj wprowadź opis obrazu

Błąd w przeglądarce Firefox XML Parsing Error: junk after document element Location: https://letscreatecustomdomainname-dev-ed--sii.ap6.visual.force.com/apex/PackageXMLGenerator?core.apexpages.devmode.url=1&core.apexpages.request.devconsole=1 Line Number 1, Column 228:<?xml version="1.0" encoding="UTF-8"?><products><product><Name>Xbox One</Name><Code>XBO</Code></product><product><Name>PlayStation 4</Name><Code>PS4</Code></product><product><Name>WII</Name><Code>Wii</Code></product></products><script type="text/javascript"> SfdcApp.Visualforce.viewstate.ViewstateSender.sendViewstate("https://letscreatecustomdomainname-dev-ed.my.salesforce.com", "sii__PackageXMLGenerator"); </script> -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^

Dostaję też trochę informacji, ale brakuje w nim wszystkich tagów. Widzę prawidłowy plik XML w debugowaniu. Poniżej znajduje się mój kod. Proszę, poprowadź mnie, jaka może być przyczyna.

Klasa Apex do generowania XML

public class PackageXMLGeneratorController { public Blob csvFileBody{get;set;} public string csvAsString{get;set;} public string xmlstring { get; set;} public PackageXMLGeneratorController(){ DOM.Document doc = new DOM.Document(); dom.XmlNode products = doc.createRootElement("products", null, null); dom.XmlNode body1= products.addChildElement("product", null, null); body1.addChildElement("Name", null, null).addTextNode("Xbox One"); body1.addChildElement("Code", null, null).addTextNode("XBO"); dom.XmlNode body2= products.addChildElement("product", null, null); body2.addChildElement("Name", null, null).addTextNode("PlayStation 4"); body2.addChildElement("Code", null, null).addTextNode("PS4"); dom.XmlNode body3= products.addChildElement("product", null, null); body3.addChildElement("Name", null, null).addTextNode("WII"); body3.addChildElement("Code", null, null).addTextNode("Wii"); xmlstring = doc.toXmlString(); System.debug("========>"+xmlstring); } public ApexPages.PageReference downloadXML( ) { return Page.PackageXMLDownload; } } 

Strona VF

<apex:page controller="PackageXMLGeneratorController" contentType="text/xml;filename.xml"> <apex:outputText escape="false" value="{!xmlstring}" /> </apex:page> 

Odpowiedź

Aby to działało po prostu dobrze , musisz zwrócić szczególną uwagę na dodatkową linię przerwy w kodzie. Utworzyłem w mojej organizacji:

<apex:page controller="q203222" contentType="text/xml;myfile.xml" showHeader="false">{!content}</apex:page> 

public class q203222 { public String getContent() { Dom.Document d = new Dom.Document(); d.createRootElement("test",null,null); d.getRootElement().addChildElement("data",null,null); return d.toXmlString(); } } 

Nie używaj apeksu: outputText i nie ma więcej niż jednej linii na stronie. Musi wyglądać zasadniczo identycznie jak ten wzorzec, aby podczas analizowania nie było błędów.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *