Embedding XML (with XML declaration) in HTML or other XML
Asked Answered
F

3

17

I have the error :

Error Parsing /WEB-INF/includes/VerDatosProyeccion.xhtml: Error Traced[line: 4302] The processing instruction target matching "[xX][mM][lL]" is not allowed.

I am using the code of same code of : http://jsfiddle.net/qxLn3h86/. I cut the code and past into my code.

My code looks like this :

        <table id="tbl1">


<tr>
    <td>Name</td>
    <td>Birthday</td>
    <td>Amount</td>
    <td>Rebate (10%)</td>
  </tr>
  <tr>
    <td>Smith</td>
    <td data-type="DateTime" data-style="Date" data-value="1980-03-23">Mar 23 1980</td>
    <td data-type="Number" data-style="Currency" data-value="1234.56">$ 1,234.56</td>
    <td data-formula="=RC[-1]/10" data-type="Number" data-style="Currency">$ 123.45</td>
  </tr>
  <tr>
    <td>Doe</td>
    <td data-type="DateTime" data-style="Date" data-value="1978-11-05">Nov 05 1978</td>
    <td data-type="Number" data-style="Currency" data-value="2345.67">$ 2,345.67</td>
    <td data-formula="=RC[-1]/10" data-type="Number" data-style="Currency">$ 234.56</td>
  </tr>
</table>

<table id="tbl2">
  <tr>
    <td>Product</td>
    <td>Price</td>
    <td>Available</td>
    <td>Count</td>
  </tr>
  <tr>
    <td>Bred</td>
    <td data-type="Number" data-style="Currency" data-value="1.89">$ 1.89</td>
    <td data-type="Boolean" data-value="1">yes</td>
    <td data-type="Number" data-value="123">123</td>
  </tr>
  <tr>
    <td>Butter</td>
    <td data-type="Number" data-style="Currency" data-value=".89">$ .89</td>
    <td data-type="Boolean" data-value="0">no</td>
    <td data-type="Number" data-value="0">0</td>
  </tr>
</table>


            <button  onclick="tablesToExcel(['tbl1','tbl2'], ['Customers','Products'], 'TestBook.xls', 'Excel')">Export to Excel</button>

</h:panelGroup>


<script>
    function exportarExcel(){
        $("#tableProyeccion").table2excel({
            exclude: ".excludeThisClass",
            name: "Worksheet Name",
            filename: "Proyeccion" //do not include extension
        });
    }
    </script>
<script>
    var tablesToExcel = (function() {
        var uri = 'data:application/vnd.ms-excel;base64,'
        , tmplWorkbookXML ='<?xml version="1.0"?><?mso-application progid="Excel.Sheet"?><Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">'
          + '<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office"><Author>Axel Richter</Author><Created>{created}</Created></DocumentProperties>'
          + '<Styles>'
          + '<Style ss:ID="Currency"><NumberFormat ss:Format="Currency"></NumberFormat></Style>'
          + '<Style ss:ID="Date"><NumberFormat ss:Format="Medium Date"></NumberFormat></Style>'
          + '</Styles>' 
          + '{worksheets}</Workbook>'
        , tmplWorksheetXML = '<Worksheet ss:Name="{nameWS}"><Table>{rows}</Table></Worksheet>'
        , tmplCellXML = '<Cell{attributeStyleID}{attributeFormula}><Data ss:Type="{nameType}">{data}</Data></Cell>'
        , base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) }
        , format = function(s, c) { return s.replace(/{(\w+)}/g, function(m, p) { return c[p]; }) }
        return function(tables, wsnames, wbname, appname) {
          var ctx = "";
          var workbookXML = "";
          var worksheetsXML = "";
          var rowsXML = "";

          for (var i = 0; i < tables.length; i++) {
            if (!tables[i].nodeType) tables[i] = document.getElementById(tables[i]);
            for (var j = 0; j < tables[i].rows.length; j++) {
              rowsXML += '<Row>'
              for (var k = 0; k < tables[i].rows[j].cells.length; k++) {
                var dataType = tables[i].rows[j].cells[k].getAttribute("data-type");
                var dataStyle = tables[i].rows[j].cells[k].getAttribute("data-style");
                var dataValue = tables[i].rows[j].cells[k].getAttribute("data-value");
                dataValue = (dataValue)?dataValue:tables[i].rows[j].cells[k].innerHTML;
                var dataFormula = tables[i].rows[j].cells[k].getAttribute("data-formula");
                dataFormula = (dataFormula)?dataFormula:(appname=='Calc' && dataType=='DateTime')?dataValue:null;
                ctx = {  attributeStyleID: (dataStyle=='Currency' || dataStyle=='Date')?' ss:StyleID="'+dataStyle+'"':''
                       , nameType: (dataType=='Number' || dataType=='DateTime' || dataType=='Boolean' || dataType=='Error')?dataType:'String'
                       , data: (dataFormula)?'':dataValue
                       , attributeFormula: (dataFormula)?' ss:Formula="'+dataFormula+'"':''
                      };
                rowsXML += format(tmplCellXML, ctx);
              }
              rowsXML += '</Row>'
            }
            ctx = {rows: rowsXML, nameWS: wsnames[i] || 'Sheet' + i};
            worksheetsXML += format(tmplWorksheetXML, ctx);
            rowsXML = "";
          }

          ctx = {created: (new Date()).getTime(), worksheets: worksheetsXML};
          workbookXML = format(tmplWorkbookXML, ctx);

    console.log(workbookXML);

          var link = document.createElement("A");
          link.href = uri + base64(workbookXML);
          link.download = wbname || 'Workbook.xls';
          link.target = '_blank';
          document.body.appendChild(link);
          link.click();
          document.body.removeChild(link);
        }
      })();

</script>
Fisch answered 1/11, 2015 at 14:31 Comment(1)
Possible duplicate of Error: The processing instruction target matching "[xX][mM][lL]" is not allowedNigh
O
31

General answer

When XML declarations (<?xml version="1.0" ?>) appear anywhere other than at the very top of an XML document, parsers often confuse them with processing instructions and issue misleading error messages.

The canonical answer for fixing your error,

Error Traced[line: 4302] The processing instruction target matching "[xX][mM][lL]" is not allowed.

and all similar errors related to XML declarations is covered by this Q/A:

There you'll find solutions to the three causes of such errors:

  1. Visible content before the XML declaration
  2. Invisible content before the XML declaration
  3. Duplicate XML declarations

Suggestions for your particular case

Trying wrapping your code within script with CDATA:

<script>
//<![CDATA[
    ...code containing XML declaration (`<?xml version="1.0"?>`)
//]]>
</script>

so that the XML declaration isn't interpreted to be part of the enclosing document. XML declarations can only appear at the very top of an XML document (and there can only be one of them at most).

If that doesn't resolve your problem, examine where you're outputting the XML declaration. Make sure that there is no visible or invisible content ahead of the XML declaration, and make sure that there are not multiple XML declarations in the output. For more details see:

Overeager answered 1/11, 2015 at 14:45 Comment(0)
C
16

This can also happen if you have duplicate xml tag <?xml version="1.0"...> defined accidentally

Capua answered 28/8, 2019 at 7:43 Comment(0)
F
6

This error can also happen if you have blank space before your xml , happened to me in sending xml request with postman,

Removing blank space before request solved the issue.

Familiar answered 14/9, 2020 at 12:14 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.