我有兩個我想合併的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