【问题标题】:C# XMLReader ReadString how to read everything include nested xml in an element?C# XMLReader ReadString 如何读取元素中包含嵌套xml的所有内容?
【发布时间】:2014-11-23 04:06:37
【问题描述】:

我的xml文件,示例数据如下

 <FRUIT>
 <HTML><B>1.</B> Apple</HTML>
 <HTML><B>2.</B> Banana</HTML>
 </FRUIT>

还有我的代码

XmlReader xmlr = XmlReader.Create(myxmlfile);
while (xmlr.Read())
{
  if ((xmlr.IsStartElement()) && (xmlr.Name == "HTML"))
  {
    // this will return blank string!
    html = xmlr.ReadString();
  }
}

我需要得到&lt;B&gt;1.&lt;/B&gt; Apple的完整字符串

如何使用 ReadString() 读取 HTML 元素中的所有内容?

【问题讨论】:

  • 你在这里有什么要求? xml的结构是固定的吗?还有你想读的元素的名字,会提前知道吗?
  • 是的,xml 结构是固定的,并且在这种情况下,元素的名称“HTML”是预先知道的。

标签: c# xml xml-parsing xmlreader


【解决方案1】:

如果结构是固定的并且你知道之前的元素,那么你可以这样做:

 List<string> bananas = new List<>string();
 string contents = string.Empty;
    xmlr.ReadToFollowing("HTML");
    do
    {   
        contents = xmlr.ReadInnerXML();
        if(!string.IsNullOrEmpty(contents))
        {        
            bananas.Add(contents);  
        }

    }while(!string.IsNullOrEmpty(contents))

另请阅读XMLReader on MSDN

【讨论】:

  • 我将代码修改为 while (xmlr.Read()) { if ((xmlr.IsStartElement()) && (xmlr.Name == "HTML")) { xmlr.ReadToFollowing("HTML "); html = xmlr.ReadInnerXml(); } } 但它只会得到 2 的值。 Banana
  • 您能否将所需的输出粘贴到您的问题中?您是否希望将所有 HTML 元素作为单独的字符串?你得到一个单一的 HTML 元素,这就是你要求的对吗?如果有两个元素,您每次都在 While 循环中覆盖该值。你应该把 html += xmlr.ReadInnerXMl() 而不是 html = xmlr.ReadInnerXml()
  • 好的,实际上我需要将所有 html 存储到一个列表中 var htmllist = new List(); while (xmlr.Read()) { if ((xmlr.IsStartElement()) && (xmlr.Name == "HTML")) { xmlr.ReadToFollowing("HTML"); htmllist.Add(xmlr.ReadInnerXml()); } } 所以我只在列表中得到香蕉。
  • Err sorry...我的意思是我只在列表中得到了不正确的香蕉...我需要将所有内容都放入列表中。您更新的代码只会得到香蕉。
  • 那么您没有将 Apple 列入名单吗?我再次更新了代码。如果您使用的是 .net 3.5(或更高版本)并且性能不是问题,那么您可以使用具有更好构造和更简单选项的 LINQ。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-08
相关资源
最近更新 更多