Solved

reading XLM file in Delphi (IXMLDocument) not working

Posted on 2014-03-11
6
1,069 Views
Last Modified: 2014-03-11
I'm successfully writing an XML document with IXMLDocument which, slightly simplified, looks like this:
<?xml version="1.0"?>
<Email>
<Subject>3 events scheduled starting 3/13 1:30 PM: Job 1034</Subject>
<DeptID>111</DeptID>
<sPersonIDs>10240; 175</sPersonIDs>
<MessageText>3/11, 3/12, 3/13 1:30 - 5:00 PM Water Damage Assigned to: Bilbo Baggins</MessageText>
</Email>

Open in new window

My attempt to read the file looks like this:
procedure TChronEmail.GetFromTempFile;
  var
    i:integer;
    sFile : string;
    Doc: IXMLDocument;
    Email: IXMLNode;
begin
  sFile := [filename--I've tested that it is valid and that it is there];
  if fileExists(sFile) then begin
    Doc.LoadFromFile(sFile);
    i := 0; // for this test, only need the first entry in the file
    Email := DOC.ChildNodes.Nodes['Email'].ChildNodes[i];
    Subject := Email.ChildNodes['Subject'].Text;
    if tryStrToInt(Email.ChildNodes['DeptID'].Text, i) then DeptID := i;
    sPersonIDs := Email.ChildNodes['sPersonIDs'].Text;
    MessageText := Email.ChildNodes['MessageText'].Text;

Open in new window

Apparently I'm missing something important since I'm not getting any values back out of my file. This is my first time working with IXMLDocument/IXMLNode, so happy for any guidance. Thanks.
0
Comment
Question by:EricTaylor
  • 3
  • 2
6 Comments
 
LVL 100

Expert Comment

by:mlmcc
ID: 39921263
Are you sure the code for the file found test is being run?

Is the childnode array dimensioned from 0 or 1?

mlmcc
0
 
LVL 45

Accepted Solution

by:
aikimark earned 500 total points
ID: 39921404
Since I don't see any parent to the Email node(s), the following change should return results.
Email := DOC.ChildNodes.Nodes['Email'];

Open in new window


If the XML had been like the following...
<?xml version="1.0"?>
<Emails>
<Email>
<Subject>3 events scheduled starting 3/13 1:30 PM: Job 1034</Subject>
<DeptID>111</DeptID>
<sPersonIDs>10240; 175</sPersonIDs>
<MessageText>3/11, 3/12, 3/13 1:30 - 5:00 PM Water Damage Assigned to: Bilbo Baggins</MessageText>
</Email>
</Emails>

Open in new window

then your original statement should have been:
Email := DOC.ChildNodes.Nodes['Emails'].ChildNodes[i];

Open in new window

0
 
LVL 45

Expert Comment

by:aikimark
ID: 39921427
Note: some XPathing might also get you the first Email item.
0
Enterprise Mobility and BYOD For Dummies

Like “For Dummies” books, you can read this in whatever order you choose and learn about mobility and BYOD; and how to put a competitive mobile infrastructure in place. Developed for SMBs and large enterprises alike, you will find helpful use cases, planning, and implementation.

 

Author Closing Comment

by:EricTaylor
ID: 39921591
Thanks. That did the trick and now I understand how the pieces are relating here.

I didn't understand the XPathing comment though; would appreciate if you would clarify to give me a better understanding.
0
 
LVL 45

Expert Comment

by:aikimark
ID: 39921856
@EricTaylor

Maybe it would be better if I point you at some instructional material on XPath to get you up to speed.
http://www.w3schools.com/XPath/ (tutorial)
http://www.w3schools.com/xpath/xpath_syntax.asp (syntax)

Since we're in a Delphi development environment, you would probably benefit from seeing some Delphi code examples that use XPath.
http://delphi.about.com/od/vclusing/qt/delphi-select-xml-nodes-ixmlnodelist-selectnodes-xpath-xmldom.htm  (Delphi example)
http://keith-wood.name/DelphiXML/BookCode/  (lots of Delphi examples in this ebook/article)

If you are still stuck after playing with this, you can ask a new question about XPathing and your Delphi code.
0
 

Author Comment

by:EricTaylor
ID: 39921985
thanks  :)
0

Featured Post

U.S. Department of Agriculture and Acronis Access

With the new era of mobile computing, smartphones and tablets, wireless communications and cloud services, the USDA sought to take advantage of a mobilized workforce and the blurring lines between personal and corporate computing resources.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

If your app took Google’s lash recently, here are the 5 most likely reasons.
Healthcare organizations in the United States must adhere to the guidance of both the HIPAA (Health Insurance Portability and Accountability Act) and HITECH (Health Information Technology for Economic and Clinical Health Act) for securing and protec…
The viewer will learn how to create multiple layers to apply various filters and how to delete areas from each layer’s filter.
This video will demonstrate how to find the puppet warp tool from the edit menu and where to put the points to edit.

912 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now