我想从具有混合子节点的xml文件中的节点中提取内容。这是布局的副本:
<content>
bla bal bla...
<p />
<img url="me3_img1.jpg"></img>blaa bal
bla laal laal
<p />
</content>
“p”标签表示以下内容(图像和文字)应放入下一段。图像将使用html创建,其中图像的来源是xml中自定义img标记的URL属性。
因此输出将是:
<div>
<p>
bla bal bla...
</p>
<p>
<img src = "me3_img1.jpg"/>blaa bal
bla laal laal
</p>
</div>
了解如何开始或了解如何执行此操作将会有所帮助。 (ps:我们只允许使用1.0版的xpath和xslt)
我设法做了以下事情:
<xsl:for-each select="./review/content/*">
<xsl:if test="self::text()">
Display text
</xsl:if>
<xsl:if test="self::p">
<br/>
</xsl:if>
<xsl:if test="self::img">
Display image
</xsl:if>
</xsl:for-each>
self :: p test和self :: img测试有效,但是self :: text()测试不起作用。我在这里做错了什么?
答案 0 :(得分:1)
如果XML看起来像这样:
<content>
bla bal bla...
<p />
<img url="me3_img1.jpg">blaa bal</img>
bla laal laal
<p />
</content>
试试这个:
<xsl:for-each select="review/content/node()">
<xsl:choose>
<xsl:when test=". = not(node())">
<p><xsl:value-of select="./preceding::text()[1]" /></p>
</xsl:when>
<xsl:when test=". = text()">
<img><xsl:attribute name="src">url('<xsl:value-of select="./@url" />' </xsl:attribute></img>
<p><xsl:value-of select="." /></p>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:for-each>