我有两个我想合并的XML文档。如何使用xslt将xml节点与某些条件组合?
forSale.xml:
<forSale>
<game>
<cover>me3_cover.jpg</cover>
<title>Mass Effect 3</title>
<publisher>Electronic Arts</publisher>
<developer>BioWare</developer>
<genre>Role-Playing</genre>
<releaseDate>
<yyyy>2012</yyyy>
<mm>03</mm>
<dd>06</dd>
</releaseDate>
<esrbRating>M</esrbRating>
<platforms>
<platform>X360</platform>
<platform>PC</platform>
<platform>PS3</platform>
<platform>WIIU</platform>
</platforms>
</game>
<!--more games-->
</forSale>
reviews.xml:
<reviews>
<game>
<title>Mass Effect 3</title>
<review>
<critic>Kevin VanOrd</critic>
<synopsis>
<![CDATA[some data]]>
</synopsis>
<pros>
<pro><![CDATA[some data]]></pro>
<pro><![CDATA[some data]]></pro>
<pro><![CDATA[some data]]></pro>
<pro><![CDATA[some data]]></pro>
<pro><![CDATA[some data]]></pro>
</pros>
<cons>
<con><![CDATA[some data]]></con>
<con><![CDATA[some data]]></con>
</cons>
<content>
<![CDATA[some data]]>
<p />
<![CDATA[some data]]>
<p />
<![CDATA[some data]]>
<p />
<img url="me3_img1.jpg"><![CDATA[some data]]></img>
<![CDATA[some data]]>
<p />
<![CDATA[some data]]>
<p />
<img url="me3_img2.jpg"><![CDATA[some data]]></img>
<![CDATA[some data]]>
<p />
<![CDATA[some data]]>
<p />
<img url="me3_img3.jpg"><![CDATA[some data]]></img>
<![CDATA[some data]]>
<p />
<![CDATA[some data]]>
<p />
<img url="me3_img4.jpg"><![CDATA[some data]]></img>
<![CDATA[some data]]>
<p />
<![CDATA[some data]]>
<p />
<img url="me3_img5.jpg"><![CDATA[some data]]></img>
<![CDATA[some data]]>
<p />
<![CDATA[some data]]>
<p />
<img url="me3_img6.jpg"><![CDATA[some data]]></img>
<![CDATA[some data]]>
<p />
<![CDATA[some data]]>
<p />
<img url="me3_img7.jpg"><![CDATA[some data]]></img>
<![CDATA[some data]]>
<p />
<![CDATA[some data]]>
<p />
<img url="me3_img8.jpg"><![CDATA[some data]]></img>
<![CDATA[some data]]>
<p />
<![CDATA[some data]]>
</content>
</review>
</game>
<!--more games-->
</reviews>
,然后我想输出看起来像这样:
<forSale>
<game>
<cover>me3_cover.jpg</cover>
<title>Mass Effect 3</title>
<publisher>Electronic Arts</publisher>
<developer>BioWare</developer>
<genre>Role-Playing</genre>
<releaseDate>
<yyyy>2012</yyyy>
<mm>03</mm>
<dd>06</dd>
</releaseDate>
<esrbRating>M</esrbRating>
<platforms>
<platform>X360</platform>
<platform>PC</platform>
<platform>PS3</platform>
<platform>WIIU</platform>
</platforms>
<review>
<critic>Kevin VanOrd</critic>
<synopsis>
<![CDATA[some data]]>
</synopsis>
<pros>
<pro><![CDATA[some data]]></pro>
<pro><![CDATA[some data]]></pro>
<pro><![CDATA[some data]]></pro>
<pro><![CDATA[some data]]></pro>
<pro><![CDATA[some data]]></pro>
</pros>
<cons>
<con><![CDATA[some data]]></con>
<con><![CDATA[some data]]></con>
</cons>
<content>
<![CDATA[some data]]>
<p />
<![CDATA[some data]]>
<p />
<![CDATA[some data]]>
<p />
<img url="me3_img1.jpg"><![CDATA[some data]]></img>
<![CDATA[some data]]>
<p />
<![CDATA[some data]]>
<p />
<img url="me3_img2.jpg"><![CDATA[some data]]></img>
<![CDATA[some data]]>
<p />
<![CDATA[some data]]>
<p />
<img url="me3_img3.jpg"><![CDATA[some data]]></img>
<![CDATA[some data]]>
<p />
<![CDATA[some data]]>
<p />
<img url="me3_img4.jpg"><![CDATA[some data]]></img>
<![CDATA[some data]]>
<p />
<![CDATA[some data]]>
<p />
<img url="me3_img5.jpg"><![CDATA[some data]]></img>
<![CDATA[some data]]>
<p />
<![CDATA[some data]]>
<p />
<img url="me3_img6.jpg"><![CDATA[some data]]></img>
<![CDATA[some data]]>
<p />
<![CDATA[some data]]>
<p />
<img url="me3_img7.jpg"><![CDATA[some data]]></img>
<![CDATA[some data]]>
<p />
<![CDATA[some data]]>
<p />
<img url="me3_img8.jpg"><![CDATA[some data]]></img>
<![CDATA[some data]]>
<p />
<![CDATA[some data]]>
</content>
</review>
</game>
<!--more games-->
</forSale>
我有问题首先要说的是当reviews.xml
中的<title>
标签和forSale.xml
匹配时,那么评论必须添加其他不是。我必须使用XSLT来做到这一点,我有迄今的代码如下:
<forSale>
<xsl:for-each select="document('forSale.xml')/forSale/game">
<game>
<xsl:copy-of select="cover" />
<xsl:copy-of select="title" />
<xsl:variable name="title" select="title" />
<xsl:copy-of select="publisher" />
<xsl:copy-of select="developer" />
<xsl:copy-of select="genre" />
<xsl:copy-of select="releaseDate" />
<xsl:copy-of select="esrbRating" />
<xsl:copy-of select="platforms"/>
<xsl:template match="document('reviews.xml')/reviews/game">
<xsl:choose>
<xsl:when test="./title = $title">
<xsl:copy>
<xsl:apply-templates select="./review" />
</xsl:copy>
</xsl:when>
</xsl:choose>
</xsl:template>
</game>
</xsl:for-each>
</forSale>
再其次,我不知道如何复制<![CDATA[some data]]>
完全一样的。
任何帮助,将不胜感激!谢谢!
很好的解释+1 – 2013-05-01 13:12:42
马丁,有没有像“XSLT数据模型”。您可能想说“XPath数据模型”或“XML Infoset”? – 2013-05-02 01:35:54
那么XSLT使用“XPath数据模型”(http://www.w3.org/TR/xslt#data-model),所以在使用术语“XSLT数据模型”时我没有看到任何错误。 – 2013-05-02 08:47:52