17

状況:

画像情報を含む単純な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>
4

5 に答える 5

27

ここで問題を明確にするために、次のコードにエラーがあります。

<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 をここで使用できることに注意してください。

于 2008-09-05T14:44:27.460 に答える
4

そうではありませんか:

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

? Image/img ノード全体を属性 @src にコピーしようとしているようです

于 2008-09-05T14:22:01.633 に答える
4

属性を追加するために、XSL は

<xsl:要素名="img">
     (属性)
</xsl:要素>

ただの代わりに

<画像>
     (属性)
</img>

ただし、要素をそのままコピーするだけであれば、その必要はありません。

于 2008-09-05T14:27:44.520 に答える
3

気にしないでください - 私はばかです。 <xsl:value-of select="/root/Image/node()"/>が必要でした

于 2008-09-05T14:21:48.683 に答える
0

試すもう1つのオプションは簡単です

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

つまり、{} を使用せずに、代わりに直接の画像パスを指定します

于 2012-09-25T11:15:35.583 に答える