Парсинг XML использование терминала Unix

Подобно @Smar, но использует пути файловой системы, заданные в PRIMARY и SECONDARY:

PRIMARY=~/Code/project1
SECONDARY=~/Code/project2
cd $PRIMARY
git remote add test $SECONDARY && git fetch test
git merge test/master

Затем вы вручную объединяетесь.

(адаптировано из сообщения Anar Манафы )

12
задан Rob Cooper 26 August 2008 в 20:14
поделиться

6 ответов

Если Вы просто хотите атрибуты имени какого-либо элемента, вот быстрое, но неполное решение.

(Ваш текст в качестве примера находится в примере файла),

пример "имени" grep | сократил-d" \""-f2,2 | xargs-I {} эхо "{}",

6
ответ дан 2 December 2019 в 03:56
поделиться

XMLStarlet является инструментарием командной строки для запрошенного/редактирования/проверения/преобразовывания XML-документов (для получения дополнительной информации см. http://xmlstar.sourceforge.net/),

Никакие файлы для записи просто передайте файл по каналу к xmlstarlet и примените фильтр xpath.

cat file.xml | xml sel -t -m 'xpathExpression' -v 'elemName' 'literal' -v 'elname' -n

- m выражение-v оценивают '' включенный литерал-n новая строка

Таким образом для Вашего xpath выражение XPath было бы//myel / имя, которое обеспечит эти два значения атрибута.

Очень удобный инструмент.

6
ответ дан 2 December 2019 в 03:56
поделиться

Ответ Peter корректен, но он производит запаздывающий перевод строки.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="text"/>
  <xsl:template match="root">
    <xsl:for-each select="myel">
      <xsl:value-of select="@name"/>
      <xsl:text>,</xsl:text>
      <xsl:if test="not(position() = last())">
        <xsl:text>&#xA;</xsl:text>
      </xsl:if>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

Просто выполненный, например.

xsltproc stylesheet.xsl source.xml

генерировать CSV заканчивается в стандартный вывод.

12
ответ дан 2 December 2019 в 03:56
поделиться

Используйте процессор XSLT командной строки, такой как xsltproc, сакс или xalan, чтобы проанализировать XML и генерировать CSV. Вот пример, который для Вашего случая является таблицей стилей:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>

    <xsl:template match="root">
        <xsl:apply-templates select="myel"/>
    </xsl:template>

    <xsl:template match="myel">
        <xsl:for-each select="@*">
            <xsl:value-of select="."/>
            <xsl:value-of select="','"/>
        </xsl:for-each>
        <xsl:text>&#10;</xsl:text>
    </xsl:template> 
</xsl:stylesheet>
9
ответ дан 2 December 2019 в 03:56
поделиться

Ваш тестовый файл находится в test.xml.

sed -n 's/^\s`*`&lt;myel\s`*`name="\([^"]`*`\)".`*`$/\1,/p' test.xml

Это имеет, это - ловушки, например, если этому строго не дают, тот каждый myel находится на одной строке, необходимо "нормализовать" XML-файл сначала (таким образом, каждый myel находится на одной отдельной строке),

1
ответ дан 2 December 2019 в 03:56
поделиться

Вот немного рубинового сценария, который делает точно, что Ваш вопрос спрашивает (вытяните атрибут, названный 'именем' из элементов, названных 'myel'). Должно быть легко сделать вывод

#!/usr/bin/ruby -w

require 'rexml/document'

xml = REXML::Document.new(File.open(ARGV[0].to_s))
xml.elements.each("//myel") { |el| puts "#{el.attributes['name']}," if el.attributes['name'] }
2
ответ дан 2 December 2019 в 03:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: