【发布时间】:2012-02-22 17:25:38
【问题描述】:
我有一个简单的 xml
<data>
<node1>value1</node1>
<node2>value2</node2>
</data>
我正在使用 IXmlSerializable 通过 DTO 读取和写入此类 xml。以下代码可以正常工作
XmlReader reader;
...
while( reader.Read() ){
Console.Write( reader.ReadElementContentAsString() );
}
// outputs value1value2
但是,如果 xml 中的空格被删除,即
<data>
<node1>value1</node1><node2>value2</node2>
</data>
或者我使用XmlReaderSettings.IgnoreWhitespace = true;,代码只输出“value1”而忽略第二个节点。当我打印解析器遍历的节点时,我可以看到ReadElementContentAsString 将指针移动到node2 的EndElement,但我不明白为什么会发生这种情况或如何解决它。
这可能是 XML 解析器实现的错误吗?
================================================
这是一个示例代码和 2 个产生不同结果的 xml 示例
string homedir = Path.GetDirectoryName(Application.ExecutablePath);
string xml = Path.Combine( homedir, "settings.xml" );
FileStream stream = new FileStream( xml, FileMode.Open );
XmlReaderSettings readerSettings = new XmlReaderSettings();
readerSettings.IgnoreWhitespace = false;
XmlReader reader = XmlTextReader.Create( stream, readerSettings );
while( reader.Read() ){
if ( reader.MoveToContent() == XmlNodeType.Element && reader.Name != "data" ){
System.Diagnostics.Trace.WriteLine(
reader.NodeType
+ " "
+ reader.Name
+ " "
+ reader.ReadElementContentAsString()
);
}
}
stream.Close();
1.) settings.xml
<?xml version="1.0"?>
<data>
<node-1>value1</node-1>
<node-2>value2</node-2>
</data>
2.) settings.xml
<?xml version="1.0"?>
<data>
<node-1>value1</node-1><node-2>value2</node-2>
</data>
使用 (1) 个打印件
Element node-1 value1
Element node-2 value2
使用 (2) 个打印件
Element node-1 value1
【问题讨论】:
-
您能否发布一个小而完整的示例来重现该问题?这似乎是无效的代码,很难判断出了什么问题。
-
好的,[this][1] 说明问题[1]:stackoverflow.com/questions/2299632/…