代码之家  ›  专栏  ›  技术社区  ›  Danimal

如何添加图像?

  •  17
  • Danimal  · 技术社区  · 18 年前

    情况:

    我有一个简单的 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>
    

    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>
    
    5 回复  |  直到 7 年前
        1
  •  27
  •   samjudson    13 年前

    只是为了澄清这里的问题-错误在下面的代码位中:

    <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,因为它知道在属性值模板中使用文本值。

        2
  •  4
  •   Cory Foy    18 年前

    那不应该是:

    <xsl:value-of select="/root/Image/img/@src"/>
    

    ?看起来您正在尝试将整个image/img节点复制到属性@src

        3
  •  4
  •   harpo Binary Worrier    18 年前

    为了添加属性,XSL需要

    <xsl:element name="img">
         (attributes)
    </xsl:element>
    

    而不仅仅是

    <img>
         (attributes)
    </img>
    

    不过,是的,如果您只是按原样复制元素,则不需要任何元素。

        4
  •  3
  •   Danimal    18 年前

    没关系——我是个白痴。我只是需要 <xsl:value-of select=“/root/image/node()”/>

        5
  •  0
  •   m_cheung    14 年前

    另一个选择是直接

    <img width="100" height="100" src="/root/Image/image.jpeg" class="CalloutRightPhoto"/>
    

    也就是说,没有但是给出了直接图像路径