【发布时间】:2010-09-10 12:51:53
【问题描述】:
我创建了以下 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>
有人知道我可以通过某种方式从我的列表中过滤掉这些空包吗?
谢谢, 詹姆斯
附:我已经尝试过这里给出的提示,但它与我在这里尝试做的不太匹配。 http://www.tek-tips.com/viewthread.cfm?qid=1088712&page=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>
我在上面使用了@Alejandro 的代码,我想我就差不多了。但我在此过程中得到了一些奇怪的结果。输出示例为:
<?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 完成后立即进行令牌替换。它正在替换 XML 中的短语 svnType。我想不出使用 XSL 在每个节点上应用前缀分支/标签的方法。
希望这一切对您有所帮助,并再次感谢大家的努力。目前,XSL 对我来说有点玄学:-)。
【问题讨论】:
-
如果这些答案不能涵盖您的问题,您可以使用剩余问题编辑您的问题。
-
谢谢亚历杭德罗。根据其中一种解决方案,我在下面提供了更多信息。
-
检查我的更新。下次记得在我的答案中发表评论。否则我不会收到通知。