Xml 如何添加图像?

Xml 如何添加图像?,xml,xslt,xslt-1.0,Xml,Xslt,Xslt 1.0,情况: <root> <HeaderText> <HeaderText>Dan Testing</HeaderText> </HeaderText> <Image> <img width="100" height="100" alt="FPO lady" src="/uploadedImages/temp_photo_small.jpg"/> <

情况:

<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: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>
我有一个包含图像信息的简单XML文档。我需要把它转换成HTML。但是,我看不到open标记在哪里,当我使用下面的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: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代码:

<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: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/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,因为它知道在属性值模板中使用时会获取文本值

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


i、 e.没有{},而是给出了直接映像路径

+1,这对我很有效。我没有尝试使用“/root/Image/node()”,因为这似乎没有任何意义。我正在尝试解决一些非常类似的问题。我需要从一个PHP应用程序中生成word报告,用于使用XSLT转换XML。上面的解决方案可以生成word 2007文档吗?不,上面的解决方案不用于生成word文档,而只是用于从给定的XML输入创建标记。如果您想使用XSLT生成Word文档,那么祝您好运,因为它非常复杂。