проблемы - нужно преобразовать файл 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?
Я пропустил что-то здесь? или у кого-то есть некоторые предложения, чтобы попытаться заставить это работать, это должно быть сделано на стороне клиента.
Я полагаю, что здесь есть еще один момент: не возражайте не видеть выходной XML, если я могу запустить файл с его информацией внутри, и обозначить место для загрузки с помощью * .xml –
Ok i испытывали и играли с этим весь день. Получается, что я получаю правильный вывод XML, но браузер не показывает мне теги, поскольку он не знает, как их обрабатывать. Так что мне нужно сделать, это игнорировать тот факт, что я не вижу выход, так как внешний вид выводов не важен, мне нужна возможность SAVE выхода, поэтому мне нужен способ дать пользователю возможность ударить кнопку и сохранить Transformed XML на свой компьютер. –
Возможно, вам понравится Saxon-CE для написания таких приложений. Однако Saxon-CE не имеет XML-сериализатора (то, что преобразует XML из представления дерева в представление угловой скобки), и в любом случае способность сохранять файл из браузера в filestore локальной машины очень в зависимости от настроек безопасности браузера. –