XSL到XML-我如何做到这一点?

XSL到XML-我如何做到这一点?,xml,xslt,Xml,Xslt,这是我的xml文件: <HarperCollins> <BookComingSoon> <BookDescription> After a family tragedy... <NewParagraph/> Holden Cameron was addicted... <NewParagraph/> When equi

这是我的xml文件:

<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>