![]() |
[решено] Подскажите как получить текст расположенный между тегами
Здравствуйте,
Подскажите пожалуйста какими функциями воспользоваться, чтобы получить текст расположенный между тегами Пример: <signature>asdjkf05545jaskld5455451fjkljas564545kldjfkl;nmeje115787855ejegh</signature> |
dark-------13, в Powershell:
Код:
[xml]$text = Get-Content C:\test\test.txt |
Сделал так
Код:
$conf = "D:\base64\obr.xml" [xml]$config = get-content $conf $config.PORTRAIT $config | Out-File D:\base64\newfile.xml Write-Host $config |
И так пробовал
Код:
$xmldata = get-content "D:\base64\obr.xml" $global:xmldata = get-content "D:\base64\obr.xml" $xmldata.TodoList.Task | %{$_.CLIENTS.CLIENT.PORTRAIT} | select-object -unique $xmldata.CLIENTS.CLIENT.PORTRAIT |
dark-------13, может быть, пора показать файл или его фрагмент, достаточный для анализа? Конфиденциальные данные замените на бла-бла.
|
Пример:
Текст который заключен в тег signature расположен не в одну строку, а в несколько строк <clients> <img>55564645271</img> <signature> sddfsdfs45454555dfsfd sdfsdfsdfdssdsdsddddff54454545ffff ddffddfdffdfddf</signature> <tag>Солнце</tag> </clients> |
dark-------13, ну тогда так:
Код:
[xml]$text = Get-Content C:\test\test.txt |
Вот такое не обрабатывает:
<?xml version="1.0" encoding="utf-8"?> <CLIENTS> <CLIENT> <ANKETA_ID>1008393</ANKETA_ID> </CLIENT> </CLIENTS> |
Да все обрабатывает...
Код:
$text.clients.client.anketa_id P.S. Сначала вставляйте код в поле сообщения, потом выделяйте и жмите # на панели. |
Команда ниже разве не должна выводить текст расположенный между тегами anketa_id
Код:
[xml]$text = Get-Content D:\base64\obr.xml $text.clients.client.anketa_id [xml]$text = Get-Content D:\base64\obr.xml $text.clients.client то выдает то что между тегами client |
Цитата:
Цитата:
Если честно, я не понимаю, в чем ваша проблема. Вы показываете мне разные фрагменты файлов каждый раз, причем в отрыве от команд. В общем, последовательно указывайте узлы XML, и будет выводиться тот, что указан последним. |
Сейчас xml документ выглядит так
<?xml version="1.0" encoding="utf-8"?> <CLIENTS> <CLIENT> <ANKETA> 1008393 </ANKETA> Команду даю такую Код:
[xml]$text = Get-Content D:\base64\obr.xml Пробовал использовать эту же команду с документом <?xml version="1.0" encoding="utf-8"?> <CLIENTS> <CLIENT> <ANKETA>1008393</ANKETA> Эффекта ноль |
Цитата:
Код:
Не удается преобразовать значение "System.Object[]" в тип "System.Xml.XmlDocument". Ошибка: "Непредусмотренный конец файла. Не закрыты следующие элементы: CLIENT, CLIENTS., строка 4, позиция 25." Код:
<?xml version="1.0" encoding="utf-8"?> Что характерно, в сообщении 8 теги были закрыты. Вы их удалили - ничего не работает. Ну так ССЗБ. |
Спасибо за помощь и терпение Vadikan, пример полного документа не привожу т.к. в нем 65000 строк которые пришлось бы править суть понял - буду искать ошибку в xml документе, когда теги закрыты ищет все как положено в тестовом xml документе.
|
dark-------13, возможно, XML не валидный. Попробуйте http://www.xmlvalidation.com/
|
Вопрос, - а как такой файл обрабатывать если нужно вытащить данные из тега anketa ?
<?xml version="1.0" encoding="utf-8"?> <CLIENTS> <CLIENT> <ANKETA>1008</ANKETA> </CLIENT> <CLIENT> <ANKETA>2055508</ANKETA> </CLIENT> </CLIENTS> |
dark-------13, гм... да точно так же.
Код:
[xml]$text = Get-Content "C:\test\test.xml" Код:
1008 |
Вот что выдает
Код:
PS C:\Users\A> [xml]$text = Get-Content "D:\base64\new.xml" Код:
PS C:\Users\A> D:\батники рабочие ---\ping_do_new\БезИмени2.ps1 Предыдущий скрипт у меня должен выдавать тоже, что и у вас, но ни чего не выдает - после выполнения скрипта. Если исправляю xml так то можно выбрать данные только таким скриптом Код:
PS C:\Users\A> [xml]$text = Get-Content "D:\base64\new.xml" <CLIENTS> <CLIENT1> <ANKETA1>1008</ANKETA1> </CLIENT1> <CLIENT2> <ANKETA2>2055508</ANKETA2> </CLIENT2> </CLIENTS> |
dark-------13, а вы уберите кириллицу и пробелы из пути
Код:
iex D:\scripts\xml.ps1 |
Создал и сохранил файл test.xml в папке test на диске C
Переименовал и сохранил там же скрипт 1.ps1 После выполнения такая ерунда PS C:\Users\A> C:\test\1.ps1 Скрипты выполняются от имени администратора в Powershell_ISE.exe Если делаю так Код:
[xml]$text = Get-Content "C:\test\test.xml" ANKETA ------ 1008 2055508 Что-то я запутался при каком коде и что он должен выводить ??? Данные я то получить получил, но когда мы обратились к полю anketa командой $text.clients.client.anketa почему он не выводит данные, и должен ли выводить ??? Когда идет такой код в xml <?xml version="1.0" encoding="utf-8"?> <CLIENTS> <CLIENT> <ANKETA>1008 sdjkjhdjfh</ANKETA> </CLIENT> <CLIENT> <ANKETA>2055508</ANKETA> </CLIENT> </CLIENTS> Данные выводит так не выводит символы sdjkjhdjfh, что очень необходимо - потому, что в xml документе, тегов содержащих текст на разных строках очень много и именно эти данные нужно выбрать !!! ANKETA ------ 1008... 2055508 |
Цитата:
Еще раз вернемся к сообщению 7: Код:
[xml]$text = Get-Content C:\test\test.txt |
Применяю данный скрипт
Код:
[xml]$text = Get-Content C:\test\test.xml <?xml version="1.0" encoding="utf-8"?> <CLIENTS> <CLIENT> <ANKETA>1008 sdjkjhdjfh</ANKETA> </CLIENT> <CLIENT> <ANKETA>2055508</ANKETA> </CLIENT> </CLIENTS> Выдает ошибку: Нельзя вызвать метод для выражения со значением NULL. C:\test\1.ps1:2 знак:36 + $text.clients.client.anketa.replace <<<< ("`n","") + CategoryInfo : InvalidOperation: (replace:String) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Как должен выглядеть скрипт чтобы обработать xml документ данного типа и получить на выходе данные из двух тегов anketa в одном из которых значение 1008sdjkjhdjfh ,а во втором 2055508 !? |
PS > $x.CLIENTS.CLIENT[0].ANKETA
1008 sdjkjhdjfh PS > $x.CLIENTS.CLIENT[1].ANKETA 2055508 PS > $x.CLIENTS.CLIENT[0].ANKETA.replace("`n","") 1008 sdjkjhdjfh |
Уважаемый Kazun спасибо за помощь, после вашей подсказки родился вот такой скрипт, вот только не пойму как сделать так, чтобы он закончил обрабатывать файл - после обработки всех строк из xml документа, количество строк может меняться после изменений вносимых в XML, и выгрузить результат работы скрипта в файл ..... ?
Код:
[xml]$text = Get-Content "D:\base64\obr.xml" |
[xml]$text = Get-Content "D:\base64\obr.xml"
$text.CLIENTS.client | Foreach {"<img src=""data:image/png;base64," + $_.portrait + """ />" } | Out-File result.txt |
Время: 19:43. |
Время: 19:43.
© OSzone.net 2001-