我很难将两个XML文档合并在一起,我想要合并的新第二个xml在找到时覆盖现有字段,并在不存在时创建;
<filemeta filetype="Video">
<heading>News Headlines</heading>
<shortblurb>The latest news roundup</shortblurb>
<description />
<files>
<file type="coverimage">headlines.png</file>
</files>
<Comments />
<AlbumTitle />
<TrackNumber />
<ArtistName />
<Year />
<Genre />
<TrackTitle />
<duration>00:02:22</duration>
<totalbitrate>1168 kb/s</totalbitrate>
<videocodec>h264</videocodec>
<pixelformat>yuv420p</pixelformat>
<resolution>640x360</resolution>
<audiocodec>aac</audiocodec>
<audiofrequency>44100 Hz</audiofrequency>
<channelmulplicity>stereo</channelmulplicity>
<audioformat>s16</audioformat>
<audiobitrate>111 kb/s</audiobitrate>
</filemeta>
并与此合并;
<filemeta type="Video">
<duration>00:00:45</duration>
<totalbitrate>548 kb/s</totalbitrate>
<videocodec>h264</videocodec>
<pixelformat>yuv420p</pixelformat>
<resolution>720x576</resolution>
<audiocodec>aac</audiocodec>
<audiofrequency>48000 Hz</audiofrequency>
<channelmulplicity>stereo</channelmulplicity>
<audioformat>s16</audioformat>
<audiobitrate>65 kb/s</audiobitrate>
</filemeta>
我尝试过使用各种XSLT scripts和this但是他们似乎只是将第二个脚本附加到第一个脚本的末尾,从而使我的XML无效。理想情况下,我喜欢这个C#
任何帮助将不胜感激!
答案 0 :(得分:1)
这是一个可能的(强大的)XSLT 1.0解决方案,只是为了给出一个想法。
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:variable name="data2" select="document('test_i2.xml')/filemeta"/>
<xsl:template match="filemeta">
<xsl:copy>
<xsl:for-each select="*">
<xsl:variable name="element1" select="name(.)"/>
<xsl:choose>
<xsl:when test="count($data2/*[name()=$element1])!=0">
<xsl:copy-of select="$data2/*[name()=$element1]"/>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
看看这个question,我认为它会解决你的问题。