При применении XSLT к XML-файлу, указанному ниже, совпадение не найдено. Это преобразование выполняется на клиентской стороне в Internet Explorer 8 с использованием библиотеки Msxml2. Хотя мое конечное приложение намного сложнее, простой тест ниже терпит неудачу.XSLT, не отвечающий задачам, пространствам имен и вызовам Doctype
XML:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE document SYSTEM 'xmlschemas/domino_8_5_3.dtd'>
<document xmlns='http://www.lotus.com/dxl' version='8.5' maintenanceversion='3.0'
replicaid='862570A600460D8C' form='Appeal'>
<item name="criteria"></item>
</document>
XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dxl="http://www.lotus.com/dxl" >
<xsl:template match="dxl:document">
<xsl:text>It worked!</xsl:text>
</xsl:template>
</xsl:stylesheet>
Я прочитал бесчисленное 'решение' о пространствах имен и попытался их все ... это всегда не совпадает. ! Через пару сценариев я был в состоянии получить весь документ, удалив DOCTYPE тег, но согласующий тогда не работает (только не вернулся весь текст и не показывал
EDIT «Сработало!»: Тот же самый код который делает произведение преобразования в другой части моего заявления, но не в этом случае Вот код:.
var xml2;
var xsl2;
$.get("test2.xml", function(data) { getXSL(data); });
function getXSL(data) {
xml2 = new ActiveXObject("Msxml2.DOMDocument.6.0")
xml2.loadXML(data);
$.get("test2.xsl", function(data) { transformCriteriaXML(data); });
}
function transformCriteriaXML(data) {
xsl2 = new ActiveXObject("Msxml2.DOMDocument.6.0")
xsl2.loadXML(data);
var outFile;
var objFSO = new ActiveXObject("Scripting.FileSystemObject");
outFile = "output.txt";
var objFile = objFSO.CreateTextFile(outFile, true);
objFile.Write(xml2.transformNode(xsl2));
objFile.Close();
}
различные операционные системы и различные версии IE не являются предметом переговоров, как это приложение, компании и единственным доступным IE - версия 8.0 (причина, по которой приведенный выше код позволяет мне написать файл на локальный ПК, - это приложение HTML (.hta), и поэтому ограничения безопасности отключены.)
выход.txt сверху только когда-либо показывает <?xml version="1.0" encoding="utf-8"?>
.
Вам необходимо отредактировать вопрос и предоставить полный (но небольшой) пример кода на стороне клиента, чтобы люди могли самостоятельно воспроизвести проблему. Пока это не будет сделано, этот вопрос довольно висит в воздухе - допускает разные интерпретации и заставляет людей прибегать к догадкам. Кроме того, почему IE8? Последний выпущенный MS-браузер - как для Win 7, так и для Win 8 - IE10. Весьма важно, я считаю, что вам не нужен DTD (по крайней мере XSLT делает очень мало, если его использовать). Даже если он предназначен для проверки, это лучше делать офлайн, а не тысячи раз - для каждого HTTP-запроса. –
Попробуйте добавить: 'xml2.async = false;' и 'xsl2.async = false;' перед каждым вызовом метода 'Load()'. См. Рабочий пример здесь: http://msdn.microsoft.com/en-us/library/windows/desktop/ms761399(v=vs.85).aspx –
@DimitreNovatchev: Я попробовал его с флагом, установленным в обоих направлениях с помощью мои тесты, и, похоже, вместо этого MSXML отказывается генерировать недопустимый XML-документ для вывода. См. Мой ответ ниже. – Borodin