我没有接受过XSL的正式培训,对我来说是全新的。基本上我有一个XML文件如下:
<document document="wpc_article_video_qp">
<properties>
<property type="name" prop_ns="http://sapportals.com/xmlns/cm" prop_name="displayname"/>
<property type="createdBy">USER.PRIVATE_DATASOURCE.un:LU23921</property>
<property type="includeInRSS" prop_ns="wpc_wcm" prop_name="wpc_wcm_rss"/>
<property type="displayNewIcon" prop_ns="wpc_wcm" prop_name="wpc_wcm_new"/>
</properties>
<elements>
<element type="videotitle">TestTitle</element>
<element type="videopath">ICT/LB_1152kbps.mp4</element>
<element type="videowidth">500</element>
<element type="videoheight">250</element>
</elements>
<relatedlinks/>
<relatedfiles/>
</document>
我无法控制XML。我的意思是XML是由工具生成的,我不能改变它。我现在要做的是编写XSL,它应该生成一个锚标记,如下所示:
<a style="display:block;width:500px;height:250px" id="player" href="ICT/LB_1152kbps.mp4"></a>
其中href,width和height分别从“videopath”,“videowidth”和“videoheight”XML元素中选取。
我试图在这个网站和其他一些网站上搜索,但正如我所说,因为我是XSL的新手,我真的不知道从哪里开始。任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
如果您正在寻找一个好的开始,我建议您在图书馆中阅读一本XSLT书籍,或者查看一些在线教程,例如the one by Zvon。在编写XSLT时,我强烈推荐使用spezicalized编辑器lixe oXygen。它不仅可以避免您使用自动完成功能键入很多内容,还可以自动关闭标签,还可以检查所有程序代码和XPath语法是否有效。
这里的问题是:您可能生成一个完整的HTML文档,而不仅仅是一个锚标记。所以,这是一个模板,它通过匹配<element>
元素生成锚标记,但必须集成到整个样式表中:
<xsl:template match="element">
<a style="display:block;
width:{element/@videowidth}px;
height:{element/@videoheight}px"
id="player" href="{element/@videopath}"></a>
</xsl:template>
编辑:如果您真的想要一个仅包含锚标记的输出文档:XSLT处理器开始在根节点处理输入文档,然后在您使用{告诉它时逐步执行元素{1}}(或<xsl:apply-templates>
)。如果您希望匹配<xsl:for-each>
的模板实际启动,则必须从文档元素上下文“移动”到该上下文:
<element>
答案 1 :(得分:0)
以下是使用AVT(属性值模板)执行此操作的方法:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="elements">
<xsl:copy>
<a style="display:block;
width:{*[@type='videowidth']}px;
height:{*[@type='videoheight']}px"
id="player" href="{*[@type='videopath']}"></a>
</xsl:copy>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
请注意:
上面的CSS属性各自都在新行上 - 这样做是为了提高可读性。在一个真正的转变中,人们可能希望保留它们而不需要插入空间 - 在没有空间的情况下产生想要的结果。
在提供的XML文档上应用此转换时:
<document document="wpc_article_video_qp">
<properties>
<property type="name" prop_ns="http://sapportals.com/xmlns/cm" prop_name="displayname"/>
<property type="createdBy">USER.PRIVATE_DATASOURCE.un:LU23921</property>
<property type="includeInRSS" prop_ns="wpc_wcm" prop_name="wpc_wcm_rss"/>
<property type="displayNewIcon" prop_ns="wpc_wcm" prop_name="wpc_wcm_new"/>
</properties>
<elements>
<element type="videotitle">TestTitle</element>
<element type="videopath">ICT/LB_1152kbps.mp4</element>
<element type="videowidth">500</element>
<element type="videoheight">250</element>
</elements>
<relatedlinks/>
<relatedfiles/>
</document>
产生了想要的正确结果:
<elements>
<a style="display:block;width:500px;height:250px" id="player" href="ICT/LB_1152kbps.mp4"/>
</elements>