微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.net – 调用XmlReader :: ReadStartElement时抛出InvalidOperationException

我在C中编写了一个应用程序,它从类成员生成 XML文件.现在我想再次读取生成文件,并将所有属性和值保存回C类.

我的XML编写器(写成功):

void TDescription::WriteXml( XmlWriter^ writer )
{
    writer->WriteStartElement( "Description" );
    writer->WriteAttributeString( "Version",m_sversion );
    writer->WriteAttributeString( "Author",m_sAuthor );
    writer->WriteString( m_sDescription );
    writer->WriteEndElement();
}

我的XML阅读器(导致异常):

void TDescription::readxml( XmlReader^ reader )
{
    reader->ReadStartElement( "Description" );
    m_sversion = reader->GetAttribute( "Version" );
    m_sAuthor = reader->GetAttribute( "Author" );
    m_sDescription = reader->ReadString();
    reader->ReadEndElement();
}

生成的XML文件

<?xml version="1.0" encoding="utf-8"?>
<root Name="database" Purpose="try" Project="test">
     <!--Test Database-->
     <Description Version="1.1B" Author="it">primary</Description>
</root>

以下是读者引起的异常:

An unhandled exception of type 'system.invalidOperationException' occurred in System.Xml.dll

Additional information: There is an error in XML document (2,2).

代码有什么问题?我认为XmlReader方法没有以正确的方式使用!?

由于答案1,我更改了代码

reader->ReadStartElement( "root" );
reader->ReadStartElement( "Description" );
m_sversion = reader->GetAttribute( "Version" );
m_sAuthor = reader->GetAttribute( "Author" );
m_sDescription = reader->ReadString();
reader->ReadEndElement();
reader->ReadEndElement();

现在,我没有得到异常,m_sDescription获取正确的值,但m_sversion和m_sAuthor仍为空.

解决方法

在此之前,您必须为“root”调用ReadStartElement.

reader->ReadStartElement( "root" );     
reader->ReadStartElement( "Description" );

编辑:读取属性

reader->ReadToFollowing( "Description" );
reader->MovetoFirstAttribute();
String ^ m_sversion = reader->Value;     
reader->MovetoNextAttribute();
String ^ m_sAuthor = reader->Value;           
String ^ m_sDescription = reader->ReadString();     
reader->ReadEndElement();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。