Я пытаюсь сгенерировать XML-файл, который перечислять XML-файлы, которые находятся в указанной папке с помощью XSL:Формат вывода XML без HTML тега с помощью XSL
XML файл:
<xml>
<folder>FolderPath-to-List</folder>
</xml>
Ожидаемый результат:
<mergeData newRoot="newRoot">
<fileList>
<fileItem>path-to-file/file1.xml</fileItem>
<fileItem>path-to-file/file2.xml</fileItem>
<fileItem>path-to-file/file3.xml</fileItem>
<fileItem>path-to-file/file4.xml</fileItem>
</fileList>
</mergeData>
до сих пор я могу собрать список файлов с помощью XSL и встроенный скрипт функцию/JScipt, как следовать в текущей папке:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="http://tempuri.org/msxsl"
>
<msxsl:script language="JScript" implements-prefix="user">
<![CDATA[
var fso = new ActiveXObject("Scripting.FileSystemObject");
function ShowFolderFileList(folderspec)
{
var f, f1, fc, s;
f = fso.GetFolder(folderspec);
fc = new Enumerator(f.files);
s = '<fileItem>';
for (; !fc.atEnd(); fc.moveNext())
{
s += fc.item();
s += '<fileItem>\n<fileItem>';
}
return(s);
}
]]>
</msxsl:script>
<xsl:template match="/">
<mergeData newRoot="Activity">
<fileList>
<xsl:value-of select="user:ShowFolderFileList('.')"/>
</fileList>
</mergeData>
</xsl:template>
</xsl:stylesheet>
Но результат в том, что вместо получения <fileItem>
и </fileItem>
, у меня есть:
<fileItem>path-to-xml\file.xml<fileItem>
Как я могу получить <fileItem>path-to-xml\file.xml</fileItem>
?
Как я могу получить «FolderPath-to-List» из моего XML, который будет использоваться при вызове пользователя: ShowFolderFileList() вместо '.' пока это не работает.
Это можно создать ('новый ActiveXObject ('Msxml2.DOMDocument.3.0')') и возвращает MSXML DOM в функции расширения, чтобы вы могли просто использовать префикс ' ' в XSLT. Они только сложны в том, что существуют различные версии MSXML (MSXML 3, 4, 6)), и я думаю, вам нужно убедиться, что сценарий создает документ DOM той же версии MSXML, используемой для запуска XSLT. Если вы хотите запустить XSLT внутри IE, вам необходимо передать 'system-property ('msxsl: version')', поскольку разные версии IE используют разные версии MSXML. –