I don't think Vim's regular expressions are the best tool for this job.
I mean, XML manipulation is much easier done in XSLT:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
    <xsl:template match="article">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <AuthorList CompleteYN="Y">
                <Author ValidYN="Y">
                    <xsl:copy-of select="AuthorList/Author[1]/*"/>
                </Author>
            </AuthorList>
            <xsl:copy-of select="node()[not(self::AuthorList)]"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

This does what you want in your example, assuming the source is a proper
XML document (among other things there must be a "root tag" encompassing
all the articles.)  Invoke with "xsltproc fix-authors.xsl articles.xml"
or with any other XSLT tool.


To get back on-topic, I find these scripts make working with XSLT a bit
less painful:

xslhelper.vim  http://www.vim.org/scripts/script.php?script_id=1364
closetag.vim  http://www.vim.org/scripts/script.php?script_id=13

This, on the other hand, is on my list of "things to check", but I still
haven't got around to checking it out:

xml.vim  http://www.vim.org/scripts/script.php?script_id=1397


Tobia

Reply via email to