xml 你如何添加图像?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/45904/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How do you add an image?
提问by Danimal
Situation:
情况:
I have a simple XMLdocument that contains image information. I need to transform it into HTML. However, I can't see where the open tag is and when I use the XSLcode below, it shows the following error message:
我有一个包含图像信息的简单XML文档。我需要将其转换为HTML。但是,我看不到 open 标签的位置,当我使用下面的XSL代码时,它显示以下错误消息:
"Cannot write an attribute node when no element start tag is open."
“当没有打开元素开始标记时,无法写入属性节点。”
XML content:
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 code:
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>
回答by samjudson
Just to clarify the problem here - the error is in the following bit of code:
只是为了澄清这里的问题 - 错误出现在以下代码中:
<xsl:attribute name="src">
<xsl:copy-of select="/root/Image/node()"/>
</xsl:attribute>
The instruction xsl:copy-of takes a node or node-set and makes a copy of it - outputting a node or node-set. However an attribute cannot contain a node, only a textual value, so xsl:value-of would be a possible solution (as this returns the textual value of a node or nodeset).
指令 xsl:copy-of 获取一个节点或节点集并制作它的副本 - 输出一个节点或节点集。然而,属性不能包含节点,只能包含文本值,因此 xsl:value-of 将是一个可能的解决方案(因为它返回节点或节点集的文本值)。
A MUCH shorter solution (and perhaps more elegant) would be the following:
一个更短的解决方案(也许更优雅)如下:
<img width="100" height="100" src="{/root/Image/node()}" class="CalloutRightPhoto"/>
The use of the {} in the attribute is called an Attribute Value Template, and can contain any XPATH expression.
在属性中使用 {} 称为属性值模板,可以包含任何 XPATH 表达式。
Note, the same XPath can be used here as you have used in the xsl_copy-of as it knows to take the textual value when used in a Attribute Value Template.
注意,这里可以使用与您在 xsl_copy-of 中使用的相同的 XPath,因为它知道在属性值模板中使用时采用文本值。
回答by Cory Foy
Shouldn't that be:
不应该是:
<xsl:value-of select="/root/Image/img/@src"/>
? It looks like you are trying to copy the entire Image/img node to the attribute @src
? 看起来您正在尝试将整个 Image/img 节点复制到属性 @src
回答by harpo
In order to add attributes, XSL wants
为了添加属性,XSL 想要
<xsl:element name="img">
(attributes)
</xsl:element>
instead of just
而不仅仅是
<img>
(attributes)
</img>
Although, yes, if you're just copying the element as-is, you don't need any of that.
虽然,是的,如果您只是按原样复制元素,则不需要任何这些。
回答by Danimal
Never mind -- I'm an idiot. I just needed <xsl:value-of select="/root/Image/node()"/>
没关系——我是个白痴。我只需要<xsl:value-of select="/root/Image/node()"/>
回答by m_cheung
The other option to try is a straightforward
另一个尝试的选择是一个简单的
<img width="100" height="100" src="/root/Image/image.jpeg" class="CalloutRightPhoto"/>
i.e. without {} but instead giving the direct image path
即没有 {} 而是提供直接图像路径

