Jessaie de rendre un xml sur une page VF avec contentType="text/xml"
mais jobtiens une erreur dans Chrome
Erreur dans 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> -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^
Jen reçois aussi mais il manque toutes les balises. Je peux voir un xml correct dans le débogage. Voici mon code. Veuillez me guider quelle pourrait en être la raison.
Classe Apex pour générer le 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; } }
Page VF
<apex:page controller="PackageXMLGeneratorController" contentType="text/xml;filename.xml"> <apex:outputText escape="false" value="{!xmlstring}" /> </apex:page>
Réponse
Afin de le faire fonctionner simplement à droite , vous devez faire très attention à la ligne supplémentaire casse votre code. Jai créé ce qui suit dans mon organisation:
<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(); } }
Nutilisez pas dapex: outputText et nont pas plus dune ligne dans votre page. Il doit être fondamentalement identique à ce modèle afin de ne pas avoir derreurs lors de lanalyse.