Reading values from xml file

361 views (last 30 days)
Chris
Chris on 26 Mar 2012
Commented: Goncalo Gouveia on 12 Jan 2023 at 0:01
I've read around a bit and cant seem to get this to work. I am trying to read out a specific value from stereotyped xml files. The xml files look like this: http://i.imgur.com/uSEQt.png and I am trying to access the second "Frame relativeTime" value from the file for use in a data analysis pack I'm writing. There are many "Frame realtive time" entrees in the xml file but I am just trying to pull the second value and save it as a variable."
Any thoughts?
Thanks

Answers (5)

Pritom Kumar Saha
Pritom Kumar Saha on 3 Aug 2021
Try
S = readstruct("abcd.xml")
it works on my matlab version.
It should work on matlab 2020b or higher version.
  2 Comments
Hongyuan Zhang
Hongyuan Zhang on 24 Feb 2022
This works pretty well!

Sign in to comment.


Thomas
Thomas on 27 Mar 2012
Try this from the file exchange. I have found it to be useful
example : here is sample.xml
<?xml version="1.0"?>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-12-16</publish_date>
<description>A former architect battles corporate zombies,
an evil sorceress, and her own childhood to become queen
of the world.</description>
</book>
If I have to find the price of the second book:
c=xml2struct('sample.xml') % use function from file exchange
>> new.catalog.book{1,2}.price
ans =
Text: '5.95'
  4 Comments
Chris
Chris on 27 Mar 2012
Used your code: Still getting
Attempt to reference field of non-structure array.
Error in Calcium2Pextended>pushbutton1_Callback (line 96)
test_data.PVScan.Sequence.Frame{1,2}.Attributes.relativeTime

Sign in to comment.


Turlough Hughes
Turlough Hughes on 14 May 2021
You can now read XML files in R2021a using readtable (and readtimetable). For example:
filename = 'students.xml';
T = readtable(filename);
You can also select specific variables or attributes to read via detectImportOptions (or XMLImportOptions) - first get the opts and display the variable names:
opts = detectImportOptions(filename);
opts.VariableNames.'
then select the variable names that you want - let's say you want FirstNameAttribute, LastNameAttribute and Age, that would go as follows:
opts.SelectedVariableNames = opts.VariableNames(2:4);
T = readtable(filename,opts)
  1 Comment
Goncalo Gouveia
Goncalo Gouveia on 12 Jan 2023 at 0:01
simple and easy, worked like a charm

Sign in to comment.


Image Analyst
Image Analyst on 27 Mar 2012
Did you try xmlread()? Can you show your code and maybe upload your xml file and m-file somewhere so people can try something if they want to?
  2 Comments
Image Analyst
Image Analyst on 27 Mar 2012
Did you try it with the example code they gave? You know, all the "function theStruct = parseXML(filename)" stuff. It's complicated I know but that seems like the way they recommend in the help.

Sign in to comment.


Chris
Chris on 27 Mar 2012
<?xml version="1.0" encoding="utf-8"?>
<PVScan version="4.0.0.53" date="3/23/2012 12:30:30 PM" notes="">
<Lasers>
<Laser name="Pockels" index="0" />
</Lasers>
<Sequence type="TSeries Timed Element" cycle="1" xYStageGridDefined="False" xYStageGridNumXPositions="0" xYStageGridNumYPositions="0" xYStageGridOverlapPercentage="10" xYStageGridXOverlap="10" xYStageGridYOverlap="10">
<Frame relativeTime="0" absoluteTime="9.104738" index="1" label="CurrentSettings">
<File channel="1" channelName="Ch1" preAmpID="0" filename="slice1_field1_500uA_stimB(+)-001_Cycle001_CurrentSettings_Ch1_000001.tif" />
<File channel="4" channelName="Spot" preAmpID="0" filename="slice1_field1_500uA_stimB(+)-001_Cycle001_CurrentSettings_Ch4_000001.tif" />
<ExtraParameters validData="True" />
<Key key="objectiveLens" permissions="Read, Write, Save" value="10X" />
<Key key="objectiveLensNA" permissions="Read, Write, Save" value="0.3" />
<Key key="objectiveLensMag" permissions="Read, Write, Save" value="10" />
<Key key="pixelsPerLine" permissions="Read, Write, Save" value="200" />
<Key key="linesPerFrame" permissions="Read, Write, Save" value="88" />
<Key key="systemType" permissions="Write, Save" value="0" />
<Key key="binningMode" permissions="Read, Write, Save" value="0" />
<Key key="frameAveraging" permissions="Read, Write, Save" value="0" />
<Key key="framePeriod" permissions="Read, Write, Save" value="0.191488" />
<Key key="scanlinePeriod" permissions="Read, Write, Save" value="0.002176" />
<Key key="dwellTime" permissions="Read, Write, Save" value="8" />
<Key key="bitDepth" permissions="Read, Write, Save" value="12" />
<Key key="positionCurrent_XAxis" permissions="Write, Save" value="19401.38671875" />
<Key key="positionCurrent_YAxis" permissions="Write, Save" value="-20993.3203125" />
<Key key="positionCurrent_ZAxis" permissions="Write, Save" value="15902.42" />
<Key key="zDevice" permissions="Write, Save" value="0" />
<Key key="rotation" permissions="Read, Write, Save" value="20" />
<Key key="opticalZoom" permissions="Read, Write, Save" value="1" />
<Key key="micronsPerPixel_XAxis" permissions="Read, Write, Save" value="0.219298245614035" />
<Key key="micronsPerPixel_YAxis" permissions="Read, Write, Save" value="0.219298245614035" />
<Key key="pmtGain_0" permissions="Write, Save" value="786.290322580645" />
<Key key="pmtGain_1" permissions="Write, Save" value="0" />
<Key key="pmtOffset_0" permissions="Write, Save" value="0" />
<Key key="pmtOffset_1" permissions="Write, Save" value="0" />
<Key key="laserPower_0" permissions="Write, Save" value="18" />
<Key key="laserPowerCalibrated_0" permissions="Write, Save" value="0" />
<Key key="laserPowerAttenuation_0" permissions="Write, Save" value="0" />
<Key key="twophotonLaserPower_0" permissions="Write, Save" value="2926.17" />
<Key key="minVoltage_XAxis" permissions="Write, Save" value="-0.205995077821132" />
<Key key="minVoltage_YAxis" permissions="Write, Save" value="-0.855391548993729" />
<Key key="maxVoltage_XAxis" permissions="Write, Save" value="0.722359696628628" />
<Key key="maxVoltage_YAxis" permissions="Write, Save" value="0.0375257076868368" />
<Key key="imagingDevice" permissions="Write, Save" value="Ultima" />
</Frame>
<Frame relativeTime="0.191488" absoluteTime="9.296226" index="2" label="CurrentSettings">
<File channel="1" channelName="Ch1" preAmpID="0" filename="slice1_field1_500uA_stimB(+)-001_Cycle001_CurrentSettings_Ch1_000002.tif" />
<File channel="4" channelName="Spot" preAmpID="0" filename="slice1_field1_500uA_stimB(+)-001_Cycle001_CurrentSettings_Ch4_000002.tif" />
<ExtraParameters validData="True" />
<Key key="objectiveLens" permissions="Read, Write, Save" value="10X" />
<Key key="objectiveLensNA" permissions="Read, Write, Save" value="0.3" />
<Key key="objectiveLensMag" permissions="Read, Write, Save" value="10" />
<Key key="pixelsPerLine" permissions="Read, Write, Save" value="200" />
<Key key="linesPerFrame" permissions="Read, Write, Save" value="88" />
<Key key="systemType" permissions="Write, Save" value="0" />
<Key key="binningMode" permissions="Read, Write, Save" value="0" />
<Key key="frameAveraging" permissions="Read, Write, Save" value="0" />
<Key key="framePeriod" permissions="Read, Write, Save" value="0.191488" />
<Key key="scanlinePeriod" permissions="Read, Write, Save" value="0.002176" />
<Key key="dwellTime" permissions="Read, Write, Save" value="8" />
<Key key="bitDepth" permissions="Read, Write, Save" value="12" />
<Key key="positionCurrent_XAxis" permissions="Write, Save" value="19401.38671875" />
<Key key="positionCurrent_YAxis" permissions="Write, Save" value="-20993.3203125" />
<Key key="positionCurrent_ZAxis" permissions="Write, Save" value="15902.42" />
<Key key="zDevice" permissions="Write, Save" value="0" />
<Key key="rotation" permissions="Read, Write, Save" value="20" />
<Key key="opticalZoom" permissions="Read, Write, Save" value="1" />
<Key key="micronsPerPixel_XAxis" permissions="Read, Write, Save" value="0.219298245614035" />
<Key key="micronsPerPixel_YAxis" permissions="Read, Write, Save" value="0.219298245614035" />
<Key key="pmtGain_0" permissions="Write, Save" value="786.290322580645" />
<Key key="pmtGain_1" permissions="Write, Save" value="0" />
<Key key="pmtOffset_0" permissions="Write, Save" value="0" />
<Key key="pmtOffset_1" permissions="Write, Save" value="0" />
<Key key="laserPower_0" permissions="Write, Save" value="18" />
<Key key="laserPowerCalibrated_0" permissions="Write, Save" value="0" />
<Key key="laserPowerAttenuation_0" permissions="Write, Save" value="0" />
<Key key="twophotonLaserPower_0" permissions="Write, Save" value="2926.17" />
<Key key="minVoltage_XAxis" permissions="Write, Save" value="-0.205995077821132" />
<Key key="minVoltage_YAxis" permissions="Write, Save" value="-0.855391548993729" />
<Key key="maxVoltage_XAxis" permissions="Write, Save" value="0.722359696628628" />
<Key key="maxVoltage_YAxis" permissions="Write, Save" value="0.0375257076868368" />
<Key key="imagingDevice" permissions="Write, Save" value="Ultima" />
</Frame>
</Sequence>
</PVScan>
  6 Comments
Chris
Chris on 27 Mar 2012
Figured it out.
Had to use xpath, but could jump right to the node I wanted without mapping from the file (which was too big). Explanation here http://blogs.mathworks.com/desktop/2010/11/01/xml-and-matlab-navigating-a-tree/
[xmlfilename,pathname]=uigetfile('*.xml');
openxmlfilename = fullfile(pathname,xmlfilename);
xDoc=xmlread(openxmlfilename)
import javax.xml.xpath.*
factory = XPathFactory.newInstance;
xpath = factory.newXPath;
expression = xpath.compile('PVScan/Sequence/Frame[2]/@relativeTime');
relativeTime = expression.evaluate(xDoc, XPathConstants.NUMBER)

Sign in to comment.

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!