Объединение двух документов XML и перезапись полей XML при их обнаружении - PullRequest
0 голосов
/ 27 июня 2011

Я в тупик при объединении двух 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-скриптами и этим , но они, кажется, только добавляют второй скрипт в конец первогоодин, тем самым лишает законной силы мой XML.В идеале я хотел бы сделать это C #

Любая помощь будет оценена!

Ответы [ 2 ]

1 голос
/ 27 июня 2011

Это возможное ( brute ) решение 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>
0 голосов
/ 27 июня 2011

Посмотрите на этот вопрос , думаю, это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...