Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Чтение из XML файла средствами делфи


Автор: Anatoliy19 19.11.2011, 00:44
доброго времени суток всем вам) недавно начал разбираться в xml и тут появился такой вопрос нужно брать из xml-базы данных значения на любом уровне вложенности а также изменять их и записывать. как это сделать? 
например дан фрагмент кода:

Код

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<INVENTORY xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<BOOK>
<TITLE>Иван</TITLE>
<AUTHOR>Мартынов</AUTHOR>
<BINDING>Иванович</BINDING>
<PAGES>668774</PAGES>
</BOOK>
<BOOK>
<TITLE>Едвард</TITLE>
<AUTHOR>разумович</AUTHOR>
<BINDING>Купитманович</BINDING>
<PAGES>234234</PAGES>
</BOOK>



как мне выбрать Иван Мартынов Иванович??


M
MetalFan
Пользуйтесь кнопкой КОД!!!

Автор: MetalFan 19.11.2011, 22:29
изучайте язык запросов XPath или XQuery.

Автор: 14SatanA88 21.11.2011, 08:04
TXMLDocument
в справке и в гугле исчерпывающая информация

Автор: RomanEEP 21.11.2011, 14:17
TNativeXml http://www.simdesign.nl/xml.html

Автор: MetalFan 21.11.2011, 16:19
RomanEEP, чем он лучше стандартного, кроме того, что он платный?

Автор: Anatoliy19 21.11.2011, 16:36
я распарсил текст xml документа но я не понимаю как в цикле вывести их, например, в LIstBox

Код

procedure TForm1.btn1Click(Sender: TObject);
var i: Integer;
begin
xmldcmnt1.Active := true;
xmldcmnt1.LoadFromFile(ExtractFileP ath(Application.ExeName) + '1.xml');
i:=1 to xmldcmnt1.DocumentElement.ChildNode s[1]
edt1.Text := VarToStr(xmldcmnt1.DocumentElement. ChildNodes[0].ChildNodes['serverid'].text); {это из первого уровня}
xmldcmnt1.Active := false;
end;


если надо вот код xml документа:

Код

<?xml version="1.0" encoding="utf-8"?>
<response>
<meta>
<timestamp>2010-03-21T10:34:35+00:00</timestamp>
<serverid>ebb667fe</serverid>
<requestid>192.168.0.105.4ba5f63b8e 49c7.34267757</requestid>
</meta>
<results>
<url0>
<url><![CDATA[http://www.cheapukadds.co.uk/images/SARS/Nedbank/index.html]]></url>
<in_database>true</in_database>
<phish_id>948253</phish_id>
<phish_detail_page><![CDATA[http://www.phishtank.com/phish_detail.php?phish_id=948253]]></phish_detail_page>
<verified>true</verified>
<verified_at>2010-03-20T10:35:52+00:00</verified_at>
<valid>true</valid>
</url0>
</results>
<Inventory>
<author>Иванов</author >
</Inventory>
</response>


M
Snowy
Пользуйтесь кнопкой Код

Автор: Snowy 21.11.2011, 19:07
http://www.delphilab.ru/content/view/14/46/
Глава 22 - работа с XML
XML Document в TreeView

Код
procedure TFormXmlTree.btnLoadClick(Sender: TObject);
begin
  OpenDialog1.InitialDir := ExtractFilePath (Application.ExeName);
  if OpenDialog1.Execute then
  begin
    XMLDocument1.LoadFromFile(OpenDialog1.FileName);
    Treeview1.Items.Clear;
    DomToTree (XMLDocument1.DocumentElement, nil);
    TreeView1.FullExpand;
  end;
end;
   
procedure TFormXmlTree.DomToTree (XmlNode: IXMLNode; TreeNode: TTreeNode);
var
  I: Integer;
  NewTreeNode: TTreeNode;
  NodeText: string;
  AttrNode: IXMLNode;
begin
  // skip text nodes and other special cases
  if XmlNode.NodeType <> ntElement then
    Exit;
  // add the node itself
  NodeText := XmlNode.NodeName;
  if XmlNode.IsTextElement then
    NodeText := NodeText + ' = ' + XmlNode.NodeValue;
  NewTreeNode := TreeView1.Items.AddChild(TreeNode, NodeText);
  // add attributes
  for I := 0 to xmlNode.AttributeNodes.Count - 1 do
  begin
    AttrNode := xmlNode.AttributeNodes.Nodes[I];
    TreeView1.Items.AddChild(NewTreeNode,
      '[' + AttrNode.NodeName + ' = "' + AttrNode.Text + '"]');
  end;
  // add each child node
  if XmlNode.HasChildNodes then
    for I := 0 to xmlNode.ChildNodes.Count - 1 do
      DomToTree (xmlNode.ChildNodes.Nodes [I], NewTreeNode);
end;

Автор: DYUMON 22.11.2011, 12:11
можешь порытся в нете повнимательнее я как то искал материал нашел чей то парсер он существенно сократил количество кода.

Автор: RomanEEP 23.11.2011, 13:13
Цитата(MetalFan @  21.11.2011,  16:19 Найти цитируемый пост)
RomanEEP, чем он лучше стандартного, кроме того, что он платный?

Он абсолютно бесплатный.  Если почитать чуть внимательнее, то можно заметить, что за плату предоставляется техподдержка.

А лучше он тем что он намного удобнее и приятнее в работе. Код при работе с ним намного компактней и понятней. Он предоставляет удобные средства работы с xml полями как со строками, числами итп, обеспечивая автоматическую конвертацию. Он нативный для дельфи и используют все конвенции принятые в Delphi. Помимо этого реализован binary xml - т.е xml документ сохраняется в двоичном виде обеспечиваю высокую скорость чтения-записи а при необходимости сохраняется в обычном текстовом виде.

Автор: MetalFan 23.11.2011, 14:25
RomanEEP, ого... пошел поизучать... з.ы. а исходники в комплекте?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)