XSL到XML-我如何做到这一点?
这是我的xml文件:XSL到XML-我如何做到这一点?,xml,xslt,Xml,Xslt,这是我的xml文件: <HarperCollins> <BookComingSoon> <BookDescription> After a family tragedy... <NewParagraph/> Holden Cameron was addicted... <NewParagraph/> When equi
<HarperCollins>
<BookComingSoon>
<BookDescription>
After a family tragedy...
<NewParagraph/>
Holden Cameron was addicted...
<NewParagraph/>
When equipment, treasure...
</BookDescription>
<BookComingSoon>
</HarperCollins>
在一场家庭悲剧之后。。。
霍尔顿·卡梅隆上瘾了。。。
当装备,宝藏。。。
我必须用XML将其更改为如下所示(BookDescription部分):
示例文本示例文本示例文本,哇!
更多示例文本。太神了
如何使用XSL(1.0)实现这一点
到目前为止,我得到的是:
<blurb>
<xsl:for-each select="BookDescription">
<p><xsl:value-of select="."/></p>
</xsl:for-each>
</blurb>
编辑
这是完整的xml文档:
<?xml version="1.0"?>
<HarperCollins>
<BookComingSoon>
<Book>Night Diver</Book>
<By>Elizabeth Lowell</By>
<Pages>368</Pages>
<CoverImage>nd-el.jpg</CoverImage>
<OnSale>4/8/2014</OnSale>
<ForFansOf>Romance</ForFansOf>
<ForFansOf>Suspense</ForFansOf>
<BookDescription>
After a family tragedy...
<NewParagraph/>
Holden Cameron...
<NewParagraph/>
When equipment, treasure...
</BookDescription>
</BookComingSoon>
<BookComingSoon>
<Book>Under a Silent Moon</Book>
<By>Elizabeth Haynes</By>
<Pages>352</Pages>
<CoverImage>uasm-eh.jpg</CoverImage>
<OnSale>4/15/2014</OnSale>
<ForFansOf>Suspense</ForFansOf>
<ForFansOf>Thriller</ForFansOf>
<BookDescription>
In the crisp, ...
<NewParagraph />
As DCI Louisa Smith ...
</BookDescription>
</BookComingSoon>
</HarperCollins>
夜潜
伊莉莎白·罗威尔
368
nd-el.jpg
4/8/2014
浪漫
悬念
在一场家庭悲剧之后。。。
霍尔顿·卡梅隆。。。
当装备,宝藏。。。
在寂静的月光下
伊丽莎白海恩斯
352
uasm-eh.jpg
4/15/2014
悬念
惊悚片
在清脆的。。。
作为DCI路易莎·史密斯。。。
我使用的每种方法都是同时使用两个节点。每种方法都被过度使用:-) 试试这个:
<xsl:template match="BookComingSoon">
<blurb><xsl:apply-templates match="BookDescription" /></blurb>
</xsl:template>
<xsl:template match="BookDescription/text()">
<p><xsl:value-of select="."/></p>
</xsl:template>
<xsl:template match="NewParagraph" />
第一个将启动图书描述的处理。第二个提取所有文本并用包围,最后一个抑制不需要的元素。可能更简单。通过从一开始就不匹配new段落元素,可以避免使用空模板
<xsl:template match="/">
<blurb><xsl:apply-templates match="//BookDescription/text()" /></blurb>
</xsl:template>
<xsl:template match="BookDescription/text()">
<p><xsl:value-of select="."/></p>
</xsl:template>
您尝试过哪些代码?看来这是第一个开始。您真的应该添加一个完整的XSLT示例。我们不知道xsl:for each
的上下文是什么。如果您还添加了当前的输出,我们可能会猜测,但是完整的XSLT更好。如果您实际从该xsl:for each
(上下文为bookmomingsoon
)中获得结果,请尝试将text()
添加到select(select=“bookscription/text()”
)的末尾。如果您的图书描述包含附加标记,您可能需要查看。
<xsl:template match="/">
<blurb><xsl:apply-templates match="//BookDescription/text()" /></blurb>
</xsl:template>
<xsl:template match="BookDescription/text()">
<p><xsl:value-of select="."/></p>
</xsl:template>