Анализ C # XML с помощью xmlTextReader - PullRequest
0 голосов
/ 26 октября 2019

Я не мог ничего сделать, пытаясь читать XML. Я новичок в C #, я хочу проанализировать следующий XML, используя XmlTextReader в качестве примера.

Я беру p1 и p2, но я не смог достичь p24 и p26. Как мне поступить?

Это мой XML:

<?xml version="1.0" encoding="utf-8"?>
    <Products>
      <Books>
        <pb>
          <p1>1</p1>
          <p2>2</p2>
          <p24>
            <a>
              <a1>97924</a1>
              <a2>Fabio Moon</a2>
            </a>
            <a>
              <a1>82056</a1>
              <a2>Gabriel Ba</a2>
            </a>
          </p24>
          <p26>
            <ca>
              <ca1>001005</ca1>
              <ca2>Çocuk Kitapları</ca2>
              <ca3>
                <ca1>001005016</ca1>
                <ca2>Roman</ca2>
              </ca3>
              <ca3>
                <ca1>001005017</ca1>
                <ca2>Öykü</ca2>
              </ca3>        
            </ca>
          </p26>
        </pb>
      </Books>
    </Products>

C #:

while (xmlTextReader.Read())
{                   
    if (xmlTextReader.NodeType == XmlNodeType.Element && xmlTextReader.Name == "p1")
    { 
        Console.WriteLine(xmlTextReader.Value); 
    }
}

1 Ответ

1 голос
/ 26 октября 2019

Проблема в том, что код ищет только элемент p1 (xmlTextReader.Name == "p1" в условии if).

Я изменил код из Примеры XmlTextReader в соответствии с вашими потребностями. Если вы также хотите получить текстовые значения, вам нужно проверить, является ли узел типом XmlNodeType.Text. Затем вы можете использовать xmlTextReader.Name, чтобы получить имя тега, и xmlTextReader.Text, чтобы получить внутренний текст.

Если вы хотите только читать дочерние элементы элемента <pb>, тогда вы можете использовать ReadToDescendant.

Приведенный ниже код должен прочитать весь ваш xml и распечатать его на консоли:

// read to 'pb' element and then read it's children
xmlTextReader.ReadToDescendant("pb");
while (xmlTextReader.Read())
{
    switch (xmlTextReader.NodeType)
    {
        case XmlNodeType.XmlDeclaration:
            Console.WriteLine("<?xml version='1.0' encoding='uft-8'?>");
            break;
        case XmlNodeType.Element:
            Console.WriteLine("<{0}>", xmlTextReader.Name);
            break;
        case XmlNodeType.Text:
            Console.WriteLine(xmlTextReader.Value);
            break;            
        case XmlNodeType.EndElement:
            Console.WriteLine("</{0}>", xmlTextReader.Name);
            break;
    }
}
// remember to close the reader
if (xmlTextReader != null)
    xmlTextReader.Close();
...