C# 使用xmlTextReader进行C XML解析

C# 使用xmlTextReader进行C XML解析,c#,xml,xmltextreader,C#,Xml,Xmltextreader,在尝试读取XML时,我做不了很多事情。我是C语言的初学者,我想以XmlTextReader为例解析以下XML 我取p1和p2,但无法到达p24和p26。我应该如何进行 这是我的XML: <?xml version="1.0" encoding="utf-8"?> <Products> <Books> <pb> <p1>1</p1> <p2>

在尝试读取XML时,我做不了很多事情。我是C语言的初学者,我想以XmlTextReader为例解析以下XML

我取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>

问题是代码只在if条件下查找p1元素xmlTextReader.Name==p1

我修改了源代码以满足您的需要。如果还想获取文本值,则需要检查节点是否为XmlNodeType.text类型。然后,您可以使用xmlTextReader.Name获取标记名,并使用xmlTextReader.Text获取内部文本

如果您只想读取元素的子元素,那么可以使用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();
// 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();