如何添加图像?
时间:2020-03-05 18:48:15 来源:igfitidea点击:
我有一个包含图像信息的简单XML文档。我需要将其转换为HTML-简单,对吧?但是,当我在下面使用XSL时,它会爆炸并显示错误"没有打开元素开始标记时无法编写属性节点"。我看不到open标签在哪里-有什么想法吗?
XML:
<root> <HeaderText> <HeaderText>Dan Testing</HeaderText> </HeaderText> <Image> <img width="100" height="100" alt="FPO lady" src="/uploadedImages/temp_photo_small.jpg"/> </Image> <BodyText> <p>This is a test of the body text<br /></p> </BodyText> <ShowLinkArrow>false</ShowLinkArrow> </root>
XSL:
<xsl:stylesheet version="1.0" extension-element-prefixes="msxsl" exclude-result-prefixes="msxsl js dl" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:js="urn:custom-javascript" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:dl="urn:datalist"> <xsl:output method="xml" version="1.0" omit-xml-declaration="yes" indent="yes" encoding="utf-8"/> <xsl:template match="/" xml:space="preserve"> <img> <xsl:attribute name="width"> 100 </xsl:attribute> <xsl:attribute name="height"> 100 </xsl:attribute> <xsl:attribute name="class"> CalloutRightPhoto </xsl:attribute> <xsl:attribute name="src"> <xsl:copy-of select="/root/Image/node()"/> </xsl:attribute> </img> </xsl:template> </xsl:stylesheet>
解决方案
回答
没关系-我是个白痴。我只需要
<xsl:value-of select =" / root / Image / node()" />
回答
那不应该是:
<xsl:value-of select="/root/Image/img/@src"/>
?看来我们正在尝试将整个Image / img节点复制到属性@src
回答
为了添加属性,XSL希望
<xsl:element name="img"> (attributes) </xsl:element>
而不只是
<img> (attributes) </img>
虽然,是的,但是,如果我们仅按原样复制元素,则不需要任何内容。
回答
只是为了在这里澄清问题,该错误在于以下代码中:
<xsl:attribute name="src"> <xsl:copy-of select="/root/Image/node()"/> </xsl:attribute>
指令xsl:copy-of接受一个节点或者节点集,并对其进行复制以输出一个节点或者节点集。但是,属性不能包含节点,只能包含文本值,因此xsl:value-of将是可能的解决方案(因为这将返回节点或者节点集的文本值)。
一个更短的解决方案(也许更优雅)如下:
<img width="100" height="100" src="{/root/Image/node()}" class="CalloutRightPhoto"/>
在属性中使用{}称为属性值模板,并且可以包含任何XPATH表达式。
注意,此处可以使用与xsl_copy-of中使用的相同的XPath,因为它知道在属性值模板中使用时将采用文本值。