【问题标题】:C# XML parse with xmlTextReader使用 xmlTextReader 进行 C# XML 解析
【发布时间】:2019-10-26 20:01:46
【问题描述】:

在尝试读取 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>

C#:

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

【问题讨论】:

    标签: c# xml xmltextreader


    【解决方案1】:

    问题是代码只寻找p1 元素(xmlTextReader.Name == "p1" 在 if 条件中)。

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

    如果您只想读取&lt;pb&gt; 元素的子元素,则可以使用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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-18
      • 1970-01-01
      • 2011-11-17
      • 2019-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多