c# - XmlReader 类中的 `ReadString` 与 `ReadContentAsString` 有什么区别?

标签 c# .net xmlreader

我注意到在一些开源代码中,System.Xml.XmlReader.ReadString()的用法解析 XML。但是当我试图在控制台应用程序中使用它只是为了检查它时(我天生好奇女孩)当我按下 . 时,我没有得到任何智能感知。反对 XmlReader类实例变量。

我真的很感兴趣并检查了 MSIL使用 ILDASM .那时我注意到这个类方法装饰有
[EditorBrowsable(EditorBrowsableState.Never)]
还注意到我打给 ReadString() 的电话已转换为另一种方法,名称为 ReadContentAsString .我可以在 MSDN 上找到关于微软程序员为什么做出这个决定的零文档。

任何人?我真的很想知道,以便我在生产代码中调用正确的方法。

也不希望任何看到我的代码的 future 开发人员因为我是女孩和开发人员而将我视为傻瓜(这是我在高度男性主导的职业中看到的罕见组合;)

最佳答案

您应该首先阅读这两个函数的官方文档:
ReadString() :

reads the contents of an element or text node as a string. However, we recommend that you use the ReadElementContentAsString method instead, because it provides a more straightforward way to handle this operation.


ReadContentAsString() :

Reads the text content at the current position as a String object.


ReadString()仅适用于两种类型的节点——文本和元素——ReadContentAsString()处理一大堆它们,包括 CDATA、空格和注释,但不处理元素!我认为后一种方法过于笼统了,因为它处理不同节点类型的规则以及读取需要在元素内部而不是在元素的开头。
我考虑 ReadString()更方便的方法,因为只需将读取器定位在元素的开头即可读取其内容。推荐使用 ReadElementContentAsString() 在我看来是不合理的,因为推荐的方法:

reads the start tag, the contents of the element, and moves the reader past the end element tag.


如您所见,它是不对称的,会自动跳过结束标签,将阅读器放在后面的节点上。这种行为可能很容易打破某些简单的模式,例如选择性阅读扫描。考虑以下代码,该代码扫描 XML 文件中的一系列“单元格”元素,并仅读取将特定属性设置为值 ReadMe! 的那些元素的内容。
string attrib;
string content;
while( NextCell( reader, out attrib ) )
{  if( attrib != "ReadMe!" ) continue;
    ReadCell( reader, out content );
}
就我而言,NextCell()将读取器留在单元格元素的开头或返回 false。 ReadCell()始终将阅读器留在上次读取的单元格元素的结束标记处。它使用 ReadString()要做到这一点。如果使用 ReadElementContentAsString()阅读器将留在下一个单元格的开头和 NextCell()会跳过它到它之后的单元格。

关于c# - XmlReader 类中的 `ReadString` 与 `ReadContentAsString` 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21199630/

相关文章:

c# - 从XML到具有不规则xml的C#的信息

c# - 为什么要在 Query 方法中添加 CommandType?

c# - 使用 C# 在 ASP.NET MVC 3 中创建级联下拉列表的最简单方法

c# - BadImageFormatException 未处理

.net - 使用 TFS 2010 运行异步任务单元测试

c# - 没有 Unicode 字节顺序标记。无法切换到 Unicode

c# - Monotouch 在使用设备构建时在 LINQ 查询上爆炸

c# - 使用私有(private)变量锁定c#

c# - 在 System.IO.Directory.GetFiles() 中排除文件扩展名

php - 使用带有 php XML 函数的 CURL 输出来处理大数据提要