这是我的XML:
<?xml version="1.0" encoding="UTF-8"?>
<Collection>
<Content>
<ID>2779</ID>
<Type>Content</Type>
<Title>Article One</Title>
<QuickLink>/template.aspx?id=2779</QuickLink>
<Teaser />
<Html>
<root>
<NewsArticle>
<artTitle>The Comprehensive Breast Center: Quality Care on the Fast Track</artTitle>
<artThumb>
<img alt="Thumb Article One" src="/uploadedImages/Test/News/artOne.png?n=5954" />
</artThumb>
<artFull />
<releaseDate />
<contactName />
<contactPhone />
<contactEmail />
<artTeaser>The National Cancer Institute estimates that a woman in the United States has a 1 in 8 chance of developing invasive breast cancer</artTeaser>
<artText>
<p>The Comprehensive Breast Center: Quality Care on
the Fast Track</p>
<p>
如何使用XSLT
将上述XML中的IMG标记显示为HTML文档答案 0 :(得分:1)
这样的事情可以解决问题:
<xsl:template match="/">
<xsl:for-each select="Collection/Content">
<xsl:copy-of select="Html/root/NewsArticle/artThumb/node()"/>
</xsl:for-each>
</xsl:template>
我应该注意,这假设你是从Ektron系列中得到这个 - 根据你对这个问题的标记做出的假设。这将显示集合中每个内容块的图像。如果您只想要集合的第一个内容块中的图像,则可以删除for-each
,而是使用以下内容:
<xsl:template match="/">
<xsl:copy-of select="Collection/Content/Html/root/NewsArticle/artThumb/node()"/>
</xsl:template>
此外,它可以正常工作,但我从for-each上的select前面删除了斜杠。由于代码位于已经匹配“/".
的模板中,因此看似多余更新
其中一些可以在工作区完成 - 它允许你设置css类,虽然我不确定你是否可以设置图像的title属性。以下是通过XSLT实现这一目标的方法。在这种情况下,您无法复制整个销售节点:
<xsl:template match="/">
<xsl:for-each select="Collection/Content">
<xsl:variable name="imageSrc" select="Html/root/NewsArticle/artThumb/img/@src" />
<xsl:variable name="imageId">
<xsl:text>NewsArticle_</xsl:text>
<xsl:value-of select="ID" />
<xsl:text>_image</xsl:text>
</xsl:variable>
<xsl:variable name="contentTitle" select="Html/root/NewsArticle/artTitle" />
<img id="{ $imageId }" class="myCssClass" title="{ $contentTitle }" alt="{ $contentTitle }" src="{ $imageSrc }" />
</xsl:for-each>
</xsl:template>
(再次更新 - 看来我误解了你的评论。谢谢,@MathiasMüller!) 在为这样的元素分配id时,我更喜欢使用不仅仅是内容id。在这种情况下,通过使用“NewsArticle_ {Content ID} image”,我允许容器div使用id“NewsArticle {Content Id}”,如果将来需要它而不会与图片ID。
答案 1 :(得分:1)
如何从artTitle以及类和id分配标题和alt?
在@BrianOliver给出的答案的基础上,这就是如何输出img
元素,其“title”属性反映了输入XML中artTitle
的内容 - {{1} }。
我假设“来自artTitle的alt”是指ID
的文字内容也应来自img/@alt
元素。
artTitle
但是,我不确定<xsl:template match="/">
<xsl:for-each select="Collection/Content">
<xsl:variable name="imageSrc" select="Html/root/NewsArticle/artThumb/img/@src" />
<!--xsl:variable name="imageAlt" select="Html/root/NewsArticle/artThumb/img/@alt" /-->
<xsl:variable name="imageId" select="ID"/>
<xsl:variable name="imageTitle" select="Html/root/NewsArticle/artTitle"/>
<img id="{$imageId}" class="myCssClass" title="{$imageTitle}" alt="{ $imageTitle}" src="{$imageSrc}"/>
</xsl:for-each>
</xsl:template>
属性应该来自何处。