Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
15 / 32 / 19
Регистрация: 20.08.2013
Сообщений: 730
1

Регулярное выражение для xml

10.06.2018, 20:36. Показов 3122. Ответов 13

Регулятор выражение xml

Тема пойдет о регуляторе выражения
без парсинга, причина почему парсинг не нужен
из за того что парсинг требует загрузки документа XML
я не хочу использовать парсинг , и xml
потому что его нужно загружать локально
а это не приемлемо
xml получаеться запросом чтения HttpWebRequest, мне он не нужен локально
для этого годиться и так понятно регулятор выражения

Сам XML таков и он идет с повторениями
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<Vomon name="Kimono">
<Generation ID="BNO11">
  <Homepod>036</Homepod>
  <NameCoding>GHOP</NameCoding>
  <Stringstr>6</Stringstr>
  <Name>Нобелий</Name>
  <Value>56,23</Value>
</Generation>
<Generation ID="FGPO">
  <Homepod>016</Homepod>
  <NameCoding>HONO</NameCoding>
  <Stringstr>678</Stringstr>
  <Name>Титан</Name>
  <Value>01,0000</Value>
</Generation>
<Generation ID="DJKP">
  <Homepod>006</Homepod>
  <NameCoding>TION</NameCoding>
  <Stringstr>123</Stringstr>
  <Name>Курчатов</Name>
  <Value>11,2222</Value>
</Generation>
<Generation ID="23BGH">
  <Homepod>002</Homepod>
  <NameCoding>SOME</NameCoding>
  <Stringstr>67</Stringstr>
  <Name>Ураниум</Name>
  <Value>11,1111</Value>
</Generation>
<Generation ID="100FG">
  <Homepod>001</Homepod>
  <NameCoding>TOKE</NameCoding>
  <Stringstr>12</Stringstr>
  <Name>Селен</Name>
  <Value>12,5456</Value>
</Generation>
</Vomon>
C#
1
2
3
4
/ Регулярное выражение
string pattern = $"";
// Вытаскиваем из XML-кода нужные данные
Match match = Regex.Match(xml, pattern);
думаю понятно мне нужно найти допустим SOME , или GHOP
и не просто найти их , а получить значение тегов их
начиная с куска
XML
1
<Generation ID="100FG">  //Все внутри    </Generation>
вывести каждое значение тега

C#
1
2
3
4
5
6
Console.WriteLine($"Group 0: {match.Groups[0].ToString()}");
            Console.WriteLine($"Group 1: {match.Groups[1].ToString()}");
            Console.WriteLine($"Group 2: {match.Groups[2].ToString()}");
            Console.WriteLine($"Group 3: {match.Groups[3].ToString()}");
            Console.WriteLine($"Group 4: {match.Groups[4].ToString()}");
            Console.WriteLine($"Group 5: {match.Groups[5].ToString()}");
Я разбирался с ним
вроди должно быть так
C#
1
string pattern ="^<Generation ID="
читает из начально а как (....) вот тут мостить не могу в голове представить
может так

0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.06.2018, 20:36
Ответы с готовыми решениями:

Регулярное выражение для удаление тегов XML
Подскажите пожалуйста каким регулярным выражением можно удалить все XML теги. Например: &lt;name&gt;Дядя...

Xml и регулярное выражение
Суть такая поместил я в xml регулярное выражение и получилось &lt;Func&gt;(?&lt;=&lt;span...

Регулярное выражение. Разбить XML документ
Есть xml документ. в стринг переменной. item'ov может быть очень много. &lt;?xml version=&quot;1.0&quot;...

Регулярное выражение для тегов
Не могу додуматься, как сделать так чтобы выражение что в тэги t было все синие(одним и вторым...

13
1076 / 708 / 476
Регистрация: 21.01.2014
Сообщений: 1,866
10.06.2018, 22:03 2
C#
1
Match match = Regex.Match(xml, pattern);
А в переменной xml разве не загруженный xml хранится?
1
4700 / 3244 / 1375
Регистрация: 09.05.2015
Сообщений: 7,955
10.06.2018, 22:44 3
Лучший ответ Сообщение было отмечено OwenGlendower как решение

Решение

Цитата Сообщение от GENDALF_ISTARI Посмотреть сообщение
причина почему парсинг не нужен
из за того что парсинг требует загрузки документа XML
я не хочу использовать парсинг , и xml
потому что его нужно загружать локально
Чего? Вы хоть сами поняли что написали?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
            HttpWebRequest req = WebRequest.CreateHttp("http://something/somewhere/123.xml");
 
            using (var resp = req.GetResponse())
            using (var stream = resp.GetResponseStream())
            {
                XDocument doc = XDocument.Load(stream);
 
                foreach (var xe in doc.Root.Elements("Generation"))
                {
                    Console.WriteLine(xe.Attribute("ID").Value);
                    Console.WriteLine(xe.Element("Homepod").Value);
                    Console.WriteLine(xe.Element("NameCoding").Value);
                    Console.WriteLine(xe.Element("Stringstr").Value);
                    Console.WriteLine(xe.Element("Name").Value);
                    Console.WriteLine(xe.Element("Value").Value);
                    Console.WriteLine();
                }
            }
1
15 / 32 / 19
Регистрация: 20.08.2013
Сообщений: 730
10.06.2018, 22:45  [ТС] 4
я же говорю обычно xmldoc.Load("файл.xml");
он локальный должен быть как файл, и грузиться
дальше xml element attribut и так далее,
в моем случаи я получаю строку из HttpWebRequest

можно запелить созданием самого файла xml пихнуть все содержимое туда
и дальше xmldoc.Load читать и вытаскивать
но это не выгодное действие

проще регулятором сразу считать кусок
и так

C#
1
2
3
string pattern ="(<Homepod>036</Homepod>)(<NameCoding>GHOP</NameCoding>)"
match.Groups[0].ToString() //сответствует одной групе
match.Groups[1].ToString() //сответствует второй групе
все это хорошо
но как найти значение GHOP
и запихнуть по групам значение их
XML
1
2
3
4
5
6
7
<Generation ID="BNO11">
  <Homepod>036</Homepod>
  <NameCoding>GHOP</NameCoding>
  <Stringstr>6</Stringstr>
  <Name>Нобелий</Name>
  <Value>56,23</Value>
</Generation>
0
4700 / 3244 / 1375
Регистрация: 09.05.2015
Сообщений: 7,955
10.06.2018, 22:47 5
Цитата Сообщение от GENDALF_ISTARI Посмотреть сообщение
я же говорю обычно xmldoc.Load("файл.xml");
он локальный должен быть как файл, и грузиться
Вы не поверите, но там есть перегрузка, принимающая Stream...
1
15 / 32 / 19
Регистрация: 20.08.2013
Сообщений: 730
10.06.2018, 22:52  [ТС] 6
Someone007 блин и правда, не подумал потоком пихнуть
спасибо , это упрощает все
0
1076 / 708 / 476
Регистрация: 21.01.2014
Сообщений: 1,866
10.06.2018, 22:57 7
GENDALF_ISTARI, и есть LoadXml(string), которому можно скормить строку.
0
15 / 32 / 19
Регистрация: 20.08.2013
Сообщений: 730
10.06.2018, 23:05  [ТС] 8
Вообще когда

C#
1
2
3
4
5
6
 HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
            HttpWebResponse myHttpWebResponse = (HttpWebResponse)await myHttpWebRequest.GetResponseAsync();
 
            using (var stream = myHttpWebResponse.GetResponseStream())
            {
                XDocument doc = XDocument.Load(stream);
выдает ошибку
0
4700 / 3244 / 1375
Регистрация: 09.05.2015
Сообщений: 7,955
10.06.2018, 23:08 9
Цитата Сообщение от GENDALF_ISTARI Посмотреть сообщение
выдает ошибку
Какую? У меня пример из поста выше с вашим xml и моим локальным сервером отработал без ошибок.
1
15 / 32 / 19
Регистрация: 20.08.2013
Сообщений: 730
10.06.2018, 23:17  [ТС] 10
The string was not recognized as a valid Uri.
Parameter name: inputUri


at System.Xml.XmlReaderSettings.CreateReader(String inputUri, XmlParserContext inputContext)
at System.Xml.XmlReader.Create(String inputUri, XmlReaderSettings settings)
at System.Xml.Linq.XDocument.Load(String uri, LoadOptions options)
at System.Xml.Linq.XDocument.Load(String uri)
at ConsoleApp1_Regex.Program.<WR_ADD>d__1.MoveNext()

Добавлено через 2 минуты
дальше если поток использую
то вот так

System does not support 'windows-1251' encoding. Line 1, position 31.


at System.Xml.XmlTextReaderImpl.Throw(Exception e)
at System.Xml.XmlTextReaderImpl.Throw(String res, String[] args, Exception innerException)
at System.Xml.XmlTextReaderImpl.Throw(String res, String arg, Exception innerException)
at System.Xml.XmlTextReaderImpl.CheckEncoding(String newEncodingName)
at System.Xml.XmlTextReaderImpl.ParseXmlDeclaration(Boolean isTextDecl)
at System.Xml.XmlTextReaderImpl.Read()
at System.Xml.Linq.XDocument.Load(XmlReader reader, LoadOptions options)
at System.Xml.Linq.XDocument.Load(Stream stream, LoadOptions options)
at System.Xml.Linq.XDocument.Load(Stream stream)
at ConsoleApp1_Regex.Program.<WR_ADD>d__1.MoveNext()
0
4700 / 3244 / 1375
Регистрация: 09.05.2015
Сообщений: 7,955
10.06.2018, 23:26 11
Цитата Сообщение от GENDALF_ISTARI Посмотреть сообщение
System.Xml.Linq.XDocument.Load(String uri)
Принимает адрес, по которому находится xml, а вы видимо что-то не то передали (сам xml, вместо адреса?).

Цитата Сообщение от GENDALF_ISTARI Посмотреть сообщение
System does not support 'windows-1251' encoding. Line 1, position 31.
Ну а это вообще странно. У вас почему-то система не поддерживает кодировку windows-1251. У меня данное исключение не выбрасывается. Возможно потому, что я сохранил xml файл в кодировке utf-8.
1
15 / 32 / 19
Регистрация: 20.08.2013
Сообщений: 730
10.06.2018, 23:29  [ТС] 12
Someone007 в личку вам скину смс читайте
0
4700 / 3244 / 1375
Регистрация: 09.05.2015
Сообщений: 7,955
10.06.2018, 23:35 13
Можно еще такой вариант попробовать
C#
1
2
3
4
5
6
7
8
9
HttpWebRequest req = WebRequest.CreateHttp("http://localhost:8000/1.xml");
            
using (var resp = req.GetResponse())
using (var stream = resp.GetResponseStream())
using (var reader = new StreamReader(stream, Encoding.UTF8)) // тут проверить разные кодировки вместо UTF8
{
    XDocument doc = XDocument.Load(reader);
    // ...
}
0
15 / 32 / 19
Регистрация: 20.08.2013
Сообщений: 730
10.06.2018, 23:39  [ТС] 14
Сработало работает )))
в личку скину
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.06.2018, 23:39

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Регулярное выражение для e-mail'a
Добрый день, столкнулся с небольшой проблемой. Потребовалось написать регулярное выражение,...

Регулярное выражение для *.m3u
Здравствуйте! Подскажите, как с помощью регулярного выражения вытянуть адреса из *.m3u и *.pls...

Регулярное выражение для пароля
Нужно регулярное выражение для пароля. В пароле должна быть минимум одна цифра, одна...

Регулярное выражение для пароля
Здравствуйте, помогите мне, пожалуйста, с заданием: Проверить, соответствует ли пароль...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.