xml – XSLT混合内容节点
发布时间:2020-12-16 07:59:10 所属栏目:百科 来源:网络整理
导读:我有一个非常愚蠢的问题.如何确保我的XML混合内容节点不会混淆?比方说,我有一个类似于此的XML结构. root book titleStuff/title description This book is igreat/i if you need to know about stuff. I suggest link ref="Things"this one/link if you nee
我有一个非常愚蠢的问题.如何确保我的XML混合内容节点不会混淆?比方说,我有一个类似于此的XML结构.
<root> <book> <title>Stuff</title> <description> This book is <i>great</i> if you need to know about stuff. I suggest <link ref="Things">this one</link> if you need to know about things. </description> </book> [other books] </root> 我需要最终内容看起来像这样 <h1>List of books</h1> <h2><a name="Stuff"/>Stuff</h2> <p> This book is <i>great</i> if you need to know about stuff. I suggest <a href="#Things">this one</a> if you need to know about things. </p> 但我无法提取文本节点的部分,我总是抓住整个事情.我正在使用后代轴.我有什么问题吗? 这是我的xslt: <xsl:template match="description/*"> <xsl:for-each select="following-sibling::*"> <xsl:choose> <xsl:when test="name(.)='link'"> <a href="{@ref}"><xsl:value-of select="."/></a> </xsl:when> <xsl:when test="name(.)='em'"> <em><xsl:value-of select="."/></em> </xsl:when> <xsl:otherwise><p><xsl:value-of select="."/></p></xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:template> 请注意,随附的XML和生成的HTML仅仅是示例,为了清楚起见,我必须处理一个我没有附上的更大的结构.
< XSL:适用模板>是你的朋友:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:output method="html" /> <xsl:template match="root"> <h1>List of books</h1> <xsl:apply-templates /> </xsl:template> <!-- a <book> consists of its <title> and <description> --> <xsl:template match="book"> <xsl:apply-templates select="title" /> <xsl:apply-templates select="description" /> </xsl:template> <!-- <title> is turned into a <h2> --> <xsl:template match="title"> <h2> <a name="{.}"/> <xsl:value-of select="." /> </h2> </xsl:template> <!-- <description> is turned into a <p> --> <xsl:template match="description"> <p> <xsl:apply-templates /> </p> </xsl:template> <!-- default rule: copy any node beneath <description> --> <xsl:template match="description//*"> <xsl:copy> <xsl:copy-of select="@*" /> <xsl:apply-templates /> </xsl:copy> </xsl:template> <!-- override rule: <link> nodes get special treatment --> <xsl:template match="description//link"> <a href="#{@ref}"> <xsl:apply-templates /> </a> </xsl:template> <!-- default rule: ignore any unspecific text node --> <xsl:template match="text()" /> <!-- override rule: copy any text node beneath description --> <xsl:template match="description//text()"> <xsl:copy-of select="." /> </xsl:template> </xsl:stylesheet> 为您的输入XML生成以下输出(注意:为了便于阅读,我通过整理来管理它.在此过程中删除了不相关的空白区域): <h1>List of books</h1> <h2><a name="Stuff">Stuff</h2> <p>This book is <i>great</i> if you need to know about stuff. I suggest <a href="#Things">this one</a> if you need to know about things.</p> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |