Dan*_*mal 17 xml xslt xslt-1.0
情况:
我有一个包含图像信息的简单XML文档.我需要将其转换为HTML.但是,我看不到打开标记的位置,当我使用下面的XSL代码时,它显示以下错误消息:
"当没有元素开始标记打开时,无法写入属性节点."
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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
sam*_*son 27
只是为了澄清这里的问题 - 错误在以下代码中:
<xsl:attribute name="src">
<xsl:copy-of select="/root/Image/node()"/>
</xsl:attribute>
Run Code Online (Sandbox Code Playgroud)
指令xsl:copy-of接受节点或节点集并复制它 - 输出节点或节点集.但是,属性不能包含节点,只能包含文本值,因此xsl:value-of将是一种可能的解决方案(因为它返回节点或节点集的文本值).
以下是一个更短的解决方案(也许更优雅):
<img width="100" height="100" src="{/root/Image/node()}" class="CalloutRightPhoto"/>
Run Code Online (Sandbox Code Playgroud)
在属性中使用{}称为属性值模板,可以包含任何XPATH表达式.
注意,这里可以使用相同的XPath,就像你在xsl_copy-of中使用的一样,因为它知道在属性值模板中使用文本值.
| 归档时间: |
|
| 查看次数: |
97018 次 |
| 最近记录: |