Редактирование файлов XML - PullRequest
1 голос
/ 07 января 2012

У меня есть несколько файлов XML, и мне нужно отредактировать их автоматически.

Например,

<Content>
<Texts>
<Text id="1">
<en value="blaabla" />
</Text>
<Text id="2">
<en value="blablablablal" />
</Text>
</Texts>
</Content>

Мне нужно скопировать строки "en value" и добавить эти строки в нижнюю строкуно с одним изменением.

Итак, когда обработка завершена, результат должен быть таким:

<Content>
<Texts>
<Text id="1">
<en value="blablabla" />
<fr value="blablabla" />
</Text>
<Text id="2">
<en value="blablablablal" />
<fr value="blablablablal" />
</Text>
</Texts>
</Content>

Ответы [ 2 ]

2 голосов
/ 08 января 2012

Вы можете использовать этот XSLT для преобразования ваших XML-файлов:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">    
   <xsl:output indent="yes"/>

      <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
      </xsl:template>

    <xsl:template match="en[@value]">
        <xsl:copy>
        <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
        <fr value="{@value}"/>
    </xsl:template>

</xsl:stylesheet>
1 голос
/ 08 января 2012
$ sed '/<en /p' data.txt | awk '/<en /{if(x++%2)sub(/<en /, "<fr ")}1'
<Content>
<Texts>
<Text id="1">
<en value="blaabla" />
<fr value="blaabla" />
</Text>
<Text id="2">
<en value="blablablablal" />
<fr value="blablablablal" />
  • с использованием sed для дублирования строки, содержащей <en
  • с использованием awk для изменения нечетного <en на <fr

ВНИМАНИЕ: <en ... /> должна быть одна строка.

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