【发布时间】:2011-11-11 08:32:01
【问题描述】:
我对 XSL 和 XPath 非常陌生。如果这个问题显得有些愚蠢,我们深表歉意。
我有一个类似于
的 XML<root>
<widget name="status">
...
<component name="date">
<component name="day" label="Fri"/>
<component name="date" label="4"/>
</component>
<component name="time" label="11:23 AM"/>
....
</widget>
<widget name="foo">
</widget>
</root>
我需要创建一个 DateTime 标记,它由所有三个值组成,例如 周五 4 上午 11:23
我正在为它编写一个 XSL。
<DateTime>
<xsl:value-of select="(//widget[@name="status"]/component[@name='date'])[1]/@label"/>
<xsl:text> </xsl:text>
<xsl:value-of select="(//widget[@name="status"]/component[@name='date'])[2]/@label"/>
<xsl:text> </xsl:text>
<xsl:value-of select="//widget[@name="status"]/component[@name='time']/@label"/>
</DateTime>
问题:
我将“widget[@name="date"]”传递给每个 select 语句。有没有更好的方法来缩短 xpath。
我需要将它移动到模板中并调用该模板。我应该使用哪一个 call-template/apply-templates?
我们有一组类似的应用程序可以生成这些 XML。上面的 XML 来自 applicationA。 ApplicationB 可能会以稍微不同的方式显示细节,例如
<component name="datetime">Fri 4 11:23 AM</component>。我们有近 3-4 个这样的应用程序,它们以不同的方式显示细节。
DateTime 只是一个示例,我还需要从这些不同的应用程序中获取一些其他细节。
我正在考虑编写一个 XSL 来处理所有应用程序。
【问题讨论】: