2013-11-18 4 views
3

проблемы - нужно преобразовать файл XML в новый файл XML (фильтрация некоторые мусор от)как преобразовать XML в стороне клиента XML

Текущий сценарий - Наша программа создает файл XML, когда клиент запускает HTML отчет от программного обеспечения (написали HTML файлы, которые используют Javascript для загрузки преобразования XSL и XML)

В настоящее время описанный выше сценарий работает только для создания HTML-кода, но мне нужно теперь выводить как XML, и каждый раз, когда я пытаюсь и и просматривать этот HTML-файл в IE, так как это то, что запускает процесс для генерации преобразования, я просто получаю ответы на узлы, нет дерева XML .. что мне здесь не хватает?

Пример HTML-файл, который загружается из программы:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<html> 
    <head> 
    <link href="Common/CMStyles.css" rel="stylesheet" type="text/css" /> 
    <script language="JavaScript" src="ReportHeader.js"></script> 

    </head> 
    <body onload="displayResult('sample.xsl');"> 
    <div id="report"></div> 
    </body> 
</html> 

ReportFunctions.js

function loadXMLDoc(dname) 
{ 
    if (window.ActiveXObject) 
    { 
    xmldom = new ActiveXObject("Microsoft.XMLDOM"); 
    xmldom.async = false; 
    xmldom.load(dname); 
    return xmldom; 
    } 
    else 
    { 
    xhttp=new XMLHttpRequest(); 
    xhttp.open("GET",dname,false); 
    xhttp.send(""); 
    return xhttp.responseXML; 
    } 
} 

function displayResult(stylename) 
{ 
    xml=loadXMLDoc("TempReportData/CabExportData.xml"); 
    xsl=loadXMLDoc(stylename); 

    if (window.ActiveXObject) 
    { 
    document.getElementById("report").innerHTML=xml.transformNode(xsl); 
    } 
    else 
    { 
    xsltProcessor=new XSLTProcessor(); 
    xsltProcessor.importStylesheet(xsl); 
    resultDocument = xsltProcessor.transformToFragment(xml,document); 
    if (document.getElementById("report").hasChildNodes()) 
    { 
     document.getElementById("report").removeChild(document.getElementById("report").lastChild); 
    } 
    document.getElementById("report").appendChild(resultDocument); 
    } 
} 

Пример файла XML:

<?xml version="1.0" encoding="UTF-8"?> 
<Report schema="1.0"> 
    <Item name="cabinet" id="1" /> 
    <Item name="cabinet" id="2" /> 
    <Item name="cabinet" id="3" /> 
    <DocumentProperties> 
     <PageProperties name="Page 1" pagenum="1" /> 
     <Paths> 
     <Data>C:\Data\</Data> 
     <Library>C:\Library\</Library> 
     <Table>C:\Table\</Table> 
     <Picture>C:\Bitmap\</Picture> 
     <Report>C:\Report\</Report> 
     <Template>C:\Template\</Template> 
     <Backup>C:\Backup\</Backup> 
     <Program>C:\</Program> 
     </Paths> 
     <Application> 
     <Product>CabPro</Product> 
     <Family>Software</Family> 
     <Version>8.0.61.2700</Version> 
     <Build>2013.10.4.0</Build> 
     <Desc /> 
     <Company>Q1</Company> 
     <Account>QSystems Pty Ltd</Account> 
     </Application> 
    </DocumentProperties> 
</Report> 

Пример файла XSL:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes" method="xml" version="1.0" encoding="iso-8859-1"/> 


    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="*"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|DocumentProperties/Paths"/> 
     </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

Expectation: от всего вышеперечисленного я ожидаю увидеть в HTML-браузере XML дерево отфильтровывая избыток и показывает мне дерево остальные из Путей

Фактический результат ... в IE выглядит примерно так. C: \ Data \ C: \ Library \ C: \ Table \ C: \ Bitmap \ C: \ Report \ C: \ Template \ C: \ Backup \ C: \

* примечание без дерева XML?

Я пропустил что-то здесь? или у кого-то есть некоторые предложения, чтобы попытаться заставить это работать, это должно быть сделано на стороне клиента.

+0

Я полагаю, что здесь есть еще один момент: не возражайте не видеть выходной XML, если я могу запустить файл с его информацией внутри, и обозначить место для загрузки с помощью * .xml –

+0

Ok i испытывали и играли с этим весь день. Получается, что я получаю правильный вывод XML, но браузер не показывает мне теги, поскольку он не знает, как их обрабатывать. Так что мне нужно сделать, это игнорировать тот факт, что я не вижу выход, так как внешний вид выводов не важен, мне нужна возможность SAVE выхода, поэтому мне нужен способ дать пользователю возможность ударить кнопку и сохранить Transformed XML на свой компьютер. –

+0

Возможно, вам понравится Saxon-CE для написания таких приложений. Однако Saxon-CE не имеет XML-сериализатора (то, что преобразует XML из представления дерева в представление угловой скобки), и в любом случае способность сохранять файл из браузера в filestore локальной машины очень в зависимости от настроек безопасности браузера. –

ответ

0

Я не имею редактор XSLT здесь, чтобы проверить, но вы пробовали это

<xsl:copy-of select="@*|node()"/> 

вместо

<xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy> 

Я хотел бы попробовать, что на обоих шаблонах.

Смежные вопросы