Я создал следующую таблицу стилей XSL, которая принимает пакет XML (полученный от SVN) и преобразует все «входные» узлы, которые не включают в себя текст «архив», в разделенный запятыми список для мой ANT скрипт Пример XML-файла выглядит следующим образом ....
<?xml version="1.0"?>
<lists>
<list path="https://mydomain.com/branches">
<entry kind="dir">
<name>James_Work</name>
<commit revision="2209">
<author>James</author>
<date>2010-09-02T11:02:08.584250Z</date>
</commit>
</entry>
</list>
</lists>
... и мой XSL это ....
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:variable name="selectionPropertyList">
<xsl:for-each select="lists/list/entry[name!='archive']">svnType/<xsl:value-of select="name" />
<xsl:if test="position()!=last()">,</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:template match="/">
<root>
<svnType><xsl:copy-of select="$selectionPropertyList" /></svnType>
</root>
</xsl:template>
</xsl:stylesheet>
Проблема, с которой я сталкиваюсь, - это когда я возвращаю пустой пакет. Это может произойти, например, если я вызову папку ветвей SVN, которая в настоящее время пуста, и в результате получу пустую запись в моем списке ANT.
Пример пакета XML выглядит следующим образом
<?xml version="1.0"?>
<lists>
<list path="https://mydomain.com/branches">
</list>
</lists>
Кто-нибудь знает, как я мог бы как-то отфильтровать эти пустые пакеты из моих списков?
Спасибо,
Джеймс
P.S. Я попробовал советы, приведенные здесь, но они не совсем соответствуют тому, что я пытаюсь сделать здесь.
http://www.tek -tips.com / viewthread.cfm? QID = 1088712 & страница = 1
Обновление
Большой пример ввода:
<?xml version="1.0"?>
<lists>
<list path="https://mydomain.com/website/branches">
<entry kind="dir">
<name>ITNAM-752</name>
<commit revision="2171">
<author>jcb4337</author>
<date>2010-08-30T15:13:21.006125Z</date>
</commit>
</entry>
<entry kind="dir">
<name>JCB4337-577</name>
<commit revision="2171">
<author>jcb4337</author>
<date>2010-08-30T15:13:21.006125Z</date>
</commit>
</entry>
<entry kind="dir">
<name>JCB4337-726</name>
<commit revision="2209">
<author>jcb4337</author>
<date>2010-09-02T11:02:08.584250Z</date>
</commit>
</entry>
<entry kind="dir">
<name>JCB4337-808</name>
<commit revision="2206">
<author>jcb4337</author>
<date>2010-09-01T13:01:51.693625Z</date>
</commit>
</entry>
<entry kind="dir">
<name>JCB4337-847</name>
<commit revision="2172">
<author>jcb4337</author>
<date>2010-08-30T15:14:12.803000Z</date>
</commit>
</entry>
</list>
</lists>
Вывод, который мне нужно получить из XSL, примерно такой:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<branches>branches/ITNAM-752,branches/JCB4337-577,branches/JCB4337-726,branches/JCB4337-808,branches/JCB4337-847</branches>
</root>
Я использовал код @ Алехандро, приведенный выше, и я вот-вот, думаю. Но по пути я получаю странные результаты. Пример вывода:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<branches>
branches/ITNAM-752,
branches/JCB4337-577,
branches/JCB4337-726,
branches/JCB4337-808,
branches/JCB4337-847,
</branches>
</root>
Итак ...
1) Получение большого количества пустого пространства между элементами списка.
2) У меня все еще есть дополнительная запятая в конце результатов.
3) Когда я пытаюсь применить это к нашей папке тегов SVN, я получаю некоторые странные результаты. Теги немного отличаются, потому что они содержат эту «архивную» папку, которую я хочу исключить из любых результатов.
В настоящее время, когда я выводю папку тегов, используя тот же код, я получаю это ...
<?xml version="1.0" encoding="UTF-8"?>
<root>
<tags>
archive
jcb4337
2010-08-31T08:56:51.006125Z
tags/milestone 1-0-0,
tags/milestone 1-0-0b,
tags/milestone 1-0-1,
tags/milestone 1-0-10,
tags/milestone 1-0-11,
tags/milestone 1-0-2,
tags/milestone 1-0-3,
tags/milestone 1-0-4,
tags/milestone 1-0-5,
tags/milestone 1-0-6,
tags/milestone 1-0-7,
tags/milestone 1-0-8,
tags/milestone 1-0-9,
</tags>
</root>
Так много пробелов и архивов, наряду со всей отметкой времени, появляется информация об авторе, используя решение @Alejandro.
Кстати, если вам интересно, что ANT выполняет замену токена сразу после завершения XSL. Он заменяет фразу svnType в XML. Я не мог придумать способ применения префиксных веток / тегов на каждом узле с использованием XSL.
Надеюсь, что все это поможет немного больше, и еще раз спасибо за усилия всех. На данный момент XSL для меня немного чёрное искусство: -).