Russian Qt Forum
Ноябрь 25, 2024, 23:00 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Простой вопрос про чтение XML  (Прочитано 5746 раз)
Scotty
Гость
« : Октябрь 08, 2009, 22:44 »

Вопрос прост, есть файл XML такого вот содержания:

Код:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE Nodes [
<!ENTITY % NameValue "CDATA">
<!ENTITY % PropType "(I|S|D|L|H|B)">
<!ENTITY % VersionValue "CDATA">
<!ELEMENT Prp (#PCDATA)>
<!ELEMENT Node (Node|Prp)*>
<!ELEMENT Nodes (Node)+>

<!ATTLIST Nodes version CDATA "1">

<!ATTLIST Node name CDATA #REQUIRED>

<!ATTLIST Prp name CDATA #REQUIRED>
<!ATTLIST Prp type CDATA #REQUIRED>
<!ATTLIST Prp value CDATA #REQUIRED>
]>
<Nodes version="1">
<Node name="root">
<Prp name="start time" type="D" value="40094.9167055787"/>
<Prp name="test type" type="S" value="GetLogInformation"/>
<Prp name="stop time" type="D" value="40094.9168594792"/>
<Prp name="error count" type="I" value="0"/>
<Prp name="warning count" type="I" value="0"/>
<Prp name="root file name" type="S" value="RootLogData.dat"/>
<Prp name="root logdata name" type="S" value=""/>
<Prp name="completed" type="B" value="-1"/>
<Prp name="computer name" type="S" value="QWERTY"/>
<Prp name="status" type="I" value="0"/>
<Prp name="user name" type="S" value="scotty"/>
</Node>
</Nodes>

И собственно сам вопрос, как это мне разобрать ... всмысле мне нужно получить значениие аттрибута value у "root file name". Я пытался разобраться с xbeltree но так как там написано - не получилось ... помогите пожалуйста, я в Qt новичек и пока что ничего толком сделать не могу ... заранее большое спасибо ...
p.s.
 Я пытался делать так :
Код:

void MainWindow::GetCount(){
  QDomDocument *doc = new QDomDocument("C:\\pro\\1.xml");
  qDebug() << doc->firstChild().firstChild().childNodes().count();
}
Но упорно получаю нуль ... незнаю что делать ...
Записан
vaprele07
Гость
« Ответ #1 : Октябрь 09, 2009, 03:04 »

Ну так doc->firstChild().nodeName() тебе скажет почему;)
Записан
Scotty
Гость
« Ответ #2 : Октябрь 09, 2009, 14:34 »

Так он и говорит мол пусто ...  Непонимающий незнаю почему, что я сделал не так ? Может я как то не правильно работаю с XML?
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #3 : Октябрь 22, 2009, 02:09 »

Код
C++ (Qt)
QDomDocument doc("");
 
if ( !openXMLfile( "ИМЯ_XML_ФАЙЛА", QIODevice::ReadOnly, doc ) ) return ;
 
QDomElement deRoot = doc.documentElement();
QDomElement deNode = deRoot.namedItem("Node").toElement();
QDomElement deProp;
 
QDomNodeList dnlProps = deNode.elementsByTagName("Prp");
 
for( uint i=0; i < dnlProps.length(); ++i )
{
deProp = dnlProps.item(i).toElement();
                               if ( dnlProps.attribute("name") == "root file name" )
                              {
                                   qDebug() << dnlProps.attribute("value");
                               }
};
 
bool openXMLfile( QString fname, QFile::OpenMode mode, QDomDocument& doc )
{
QFile file( fname );
 
if ( !file.open(mode) )
{
qDebug() << "Error open file: " << fname << "!!!";
return false;
};
 
if ( !doc.setContent(&file) )
{
qDebug() << "Error read XML file: " << fname << "!!!";
file.close();
return false;
}
 
file.close();
return true;
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.144 секунд. Запросов: 22.