2011-07-28 18 views
4

クラスメンバーからXMLファイルを生成するC++アプリケーションを作成しました。今度は、生成されたファイルを再度読み込み、すべての属性と値をC++クラスに保存し直したいと思います。XmlReader :: ReadStartElementを呼び出すときにInvalidOperationExceptionがスローされる

私の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_sVersionm_sAuthorはまだ空です。

+0

実際の例外がスローさが役立つかもしれない... – crashmstr

答えて

4

"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(); 
+0

ありがとうございました!!!しかし、m_sVersionとm_sAuthorの値はまだ空であるという問題は残っています。 m_sDescriptionは正しい値を得ます!私は上記の質問に現在のコードを掲載しました! – Peter

+0

が新しいコードで更新されました。 – anivas

関連する問題