Как извлечь один атрибут из файла XML?

Я не очень хорошо знаком с regex, sed и т. д. и немного ленив, чтобы понять это в этот момент, так как я могу извлечь эту строку:

<yweather:astronomy sunrise="6:50 am" sunset="7:06 pm"/>

Дайте мне знать, если требуется больше структуры xml.

1
задан 24 March 2015 в 05:05

2 ответа

Вы не используете regex или sed. Вы используете парсер XML и язык запросов XML (XPath или XQuery). И я боюсь, что детали зависят от контекста: например, «yweather» - это короткое имя (префикс) для пространства имен, и вам нужно знать, какое пространство имен оно представляет.

3
ответ дан 23 May 2018 в 22:07

Правильный ответ, как говорит Майкл Кей, заключается в использовании инструмента, специфичного для XML.

Для быстрого и грязного решения здесь применяется подход sed. Начнем с этого файла:

$ cat file
<yweather:astronomy sunrise="6:50 am" sunset="7:06 pm"/>

Чтобы извлечь время заката:

$ sed -rn 's/.*sunset="([^"]*)".*/\1/p' file
7:06 pm

Чтобы понять регулярное выражение, разделим его на три части:

.* совпадает с началом строки до второй части. Эта часть sunset="([^"]*)" соответствует символам sunset=", за которыми следует любое количество символов, кроме ", а затем закрытие ". Выражение [^"] означает любой символ, кроме " и [^"]* означает любое количество таких символов. Параны (...) захватывают символы внутри "..." в группе sed sed 1, которую мы позже называем \1. .* соответствует всем символам после выражения заката.
2
ответ дан 23 May 2018 в 22:07
  • 1
    можете ли вы объяснить мне, что означает регулярное выражение, например, sunset="([^"]*)".* бит? – knl 15 November 2015 в 04:55
  • 2
    @knl Я просто добавил некоторое объяснение регулярному выражению к ответу. – John1024 15 November 2015 в 08:05

Другие вопросы по тегам:

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