|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Извлечь необходимую информацию из .xml, сгруппировать и записать ее в *.txt |
|
Любой язык - [решено] Извлечь необходимую информацию из .xml, сгруппировать и записать ее в *.txt
|
Новый участник Сообщения: 44 |
Всем привет.
Обычно я использую скрипт VBS, который извлекает все ссылки из .xml Скрытый текст
Option Explicit Const strDestFile = "C:/sitemap.txt" Dim strSourceFolder Dim objFSO Dim objTS Dim objFile Dim objXMLDOMSelection Dim objXMLDOMElement If WScript.Arguments.Count = 1 Then strSourceFolder = WScript.Arguments.Item(0) Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If objFSO.FolderExists(strSourceFolder) Then Set objTS = objFSO.CreateTextFile(strDestFile, True) With WScript.CreateObject("Microsoft.XMLDOM") For Each objFile In objFSO.GetFolder(strSourceFolder).Files If StrComp(objFSO.GetExtensionName(objFile.Name), "xml", vbTextCompare) = 0 Then .load objFile.Path Set objXMLDOMSelection = .selectNodes("/urlset/url/loc") If Not objXMLDOMSelection Is Nothing Then For Each objXMLDOMElement In objXMLDOMSelection objTS.WriteLine objXMLDOMElement.text Next End If Set objXMLDOMSelection = Nothing End If Next End With objTS.Close Set objTS = Nothing Else WScript.Echo "Can't find source folder [" & strSourceFolder & "]." WScript.Quit 2 End If Set objFSO = Nothing Else WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source folder>" WScript.Quit 1 End If WScript.Quit 0 Во первых данный скрипт извлекает ВСЕ ссылки, а меня интересуют только те, в которых есть */item/*. В последствии приходится очищать результат от множества других не нужных ссылок. Но теперь необходимо получить чуть больше информации. Вот структура файла .xml Здесь показан только один "блок" <url>, в котором расположена нужная информация, а таких блоков множество. (Оригинальный файл прилагается xml.zip) Скрытый текст
- <url> <loc>https://videohive.net/item/on-pottery-master-makes-notes-for-attaching-the-handle-to-the-cup/21998412</loc> <lastmod>2018-07-19</lastmod> <changefreq>weekly</changefreq> <priority>0.8</priority> - <video:video> <video:thumbnail_loc>https://s3.envato.com/files/247514118/preview.jpg</video:thumbnail_loc> <video:title>On Pottery Master Makes Notes for Attaching the Handle To the Cup</video:title> <video:description>On pottery master makes notes for attaching the handle to the cup. Male craftsman in an apron with brush makes marking on raw product in order to make ceramic mug for drinking with convenient holder.</video:description> <video:content_loc>https://s3.envato.com/h264-video-previews/38cb69c7-64ca-4977-ba3c-ec1375432f4a/21998412.mp4</video:content_loc> <video:rating>0.00</video:rating> <video:publication_date>2018-07-19T21:42:51+10:00</video:publication_date> <video:tag>art</video:tag> <video:tag>ceramist</video:tag> <video:tag>clay</video:tag> <video:tag>concept</video:tag> <video:tag>craftsman</video:tag> <video:tag>cup</video:tag> <video:tag>design</video:tag> <video:tag>handle</video:tag> <video:tag>master</video:tag> <video:tag>potter</video:tag> <video:tag>pottery</video:tag> <video:tag>raw</video:tag> <video:tag>tool</video:tag> <video:tag>work</video:tag> <video:tag>workshop</video:tag> <video:price currency="USD">27.00</video:price> <video:uploader>https://themeforest.net/user/Daria_Kozyreva/profile</video:uploader> </video:video> </url> Необходимо извлечь и записать в файл *.txt информацию в таком виде и последовательности: Скрытый текст
<video:title>On Pottery Master Makes Notes for Attaching the Handle To the Cup</video:title> <video:thumbnail_loc>https://s3.envato.com/files/247514118/preview.jpg</video:thumbnail_loc> <video:content_loc>https://s3.envato.com/h264-video-previews/38cb69c7-64ca-4977-ba3c-ec1375432f4a/21998412.mp4</video:content_loc> <loc>https://videohive.net/item/on-pottery-master-makes-notes-for-attaching-the-handle-to-the-cup/21998412</loc> <video:uploader>https://themeforest.net/user/Daria_Kozyreva/profile</video:uploader> <video:description>On pottery master makes notes for attaching the handle to the cup. Male craftsman in an apron with brush makes marking on raw product in order to make ceramic mug for drinking with convenient holder.</video:description> <video:publication_date>2018-07-19T21:42:51+10:00</video:publication_date> <video:uploader>https://themeforest.net/user/Daria_Kozyreva/profile</video:uploader> <loc>https://videohive.net/item/on-pottery-master-makes-notes-for-attaching-the-handle-to-the-cup/21998412</loc> ---------- 1) В файле *.txt некоторые строки дублируются - это не ошибка, так должно быть. 2) В конце желательно поставить ----------, который разделял бы информацию по "блокам". 3) Если некоторых данных в .xml не существует, скрипт должен продолжать работать, просто игнорируя это, но и пустых строк создавать в файле *.txt не надо. Возможно ли такое реализовать на VBS? Мне не принципиально VBS, можно и PowerShell и CMD/BAT, хотя последний вариант скорее всего будет работать медленно, а хочется чтобы скрипт работал быстро. Буду рад любой помощи. |
|
Отправлено: 11:55, 16-12-2019 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать Powershell:
[xml]$xml = (gc "D:\temp\xml\xml.xml") -match "\w" -join " " -replace "\s+"," " $result = foreach ($item in $xml.urlset.url) { if ($item.loc -match "/item/" -and $item.video.thumbnail_loc -and $item.video.content_loc) { "<video:title>$($item.video.title)</video:title>" "<video:thumbnail_loc>$($item.video.thumbnail_loc)</video:thumbnail_loc>" "<video:content_loc>$($item.video.content_loc)</video:content_loc>" "<loc>$($item.loc)</loc>" "<video:uploader>$($item.video.uploader)</video:uploader>" "<video:description>$($item.video.description)</video:description>" "<video:publication_date>$($item.video.publication_date)</video:publication_date>" "<video:uploader>$($item.video.uploader)</video:uploader>" "<loc>$($item.loc)</loc>" "----------" } } $result |Out-File "D:\temp\xml\result.txt" -Encoding utf8 |
------- Последний раз редактировалось DJ Mogarych, 16-12-2019 в 14:30. Отправлено: 13:22, 16-12-2019 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
Powershell: » Шикарно! И работает очень быстро! Такой вопрос: Можно ли указать, что если между определенными тегами не содержится ссылки, то чтобы весь блок URL пропускался (игнорировался)? Например здесь между тегами есть ссылки (они и должны там всегда быть) <video:thumbnail_loc>https://s3.envato.com/files/247514118/preview.jpg</video:thumbnail_loc> <video:content_loc>https://s3.envato.com/h264-video-previews/38cb69c7-64ca-4977-ba3c-ec1375432f4a/21998412.mp4</video:content_loc> Два тега <video:content_loc> и <video:thumbnail_loc> обязательны Если в каких либо других тегах пусто, то это не проблема, блок должен записываться. |
Последний раз редактировалось temphard, 16-12-2019 в 14:01. Отправлено: 13:56, 16-12-2019 | #3 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать поправил выше
|
------- Отправлено: 14:30, 16-12-2019 | #4 |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
|
||
Последний раз редактировалось temphard, 16-12-2019 в 15:56. Отправлено: 14:50, 16-12-2019 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Любой язык - Извлечь информацию из файлов .msg | dahiko | Скриптовые языки администрирования Windows | 12 | 29-04-2021 15:07 | |
CMD/BAT - Получение значении из XML и сохранение в txt | sector2484 | Скриптовые языки администрирования Windows | 16 | 01-10-2018 12:42 | |
Любой язык - Записать информацию о пользователях в AD из текстового файла. | dasgespenst | Скриптовые языки администрирования Windows | 2 | 29-07-2014 09:53 | |
CMD/BAT - [решено] Как записать информацию из буфера обмена в файл тхт батником? | angel_lyucifer | Скриптовые языки администрирования Windows | 12 | 26-12-2012 17:22 | |
Прочие БД - вытащить информацию из DBF файла и записать в TXT файлик | garanov | Программирование и базы данных | 5 | 23-05-2012 12:45 |
|