Reading values from xml file

259 views (last 30 days)
Chris
Chris on 26 Mar 2012
Answered: Jeffrey Warner on 2 Apr 2024
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 (6)

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
Adam Campos
Adam Campos on 18 Jan 2022
Holy moly that just saved me hours and hours of trying to figure this stuff out. Thank you!
Hongyuan Zhang
Hongyuan Zhang on 24 Feb 2022
This works pretty well!

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)
  2 Comments
Goncalo Gouveia
Goncalo Gouveia on 12 Jan 2023
simple and easy, worked like a charm
Catherine
Catherine on 10 Jun 2023
Agreed, this is exactly what I was looking for. I was getting nowhere with xmlread. Thank you very much.

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
Thomas
Thomas on 27 Mar 2012
sorry, it should read new=xml2struct('sample.xml')
and then new.catalog.book{1,2}.price
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.


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
Chris
Chris on 27 Mar 2012
I've tried xmlread(), I can get it to read the file but then I don't know how to access the relativeTime value
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
I think it may have to do with the 655K filesize. I can get the proper return value when I only include a few frames in the xml file...
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.


Jeffrey Warner
Jeffrey Warner on 2 Apr 2024
Hello,
I am trying to read this xml file to return the current filter position (<FilterPosition>) which is 4, and the Position name and position ID under the <Position Defined> node. I have not dealt with xm; files before. I tried xmlread and that returned a null result. Any healp is greatly appreciated.
DOMnode = xmlread(flName).
DOMnode = [#document: null]
I could not upload the xml file. Here is the contents of the file.
<FW102CProfileModel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Pcount="6">
<SpeedMode>HighSpeed</SpeedMode>
<TriggerMode>Input</TriggerMode>
<SensorMode>TurnOff</SensorMode>
<FilterPosition>4</FilterPosition>
<PositionDefined>
<FW102CFilterConfigMode>
<PositionName>OD0</PositionName>
<PositionID>1</PositionID>
</FW102CFilterConfigMode>
<FW102CFilterConfigMode>
<PositionName>OD0.2 (5232)</PositionName>
<PositionID>2</PositionID>
</FW102CFilterConfigMode>
<FW102CFilterConfigMode>
<PositionName>OD0.5 (5235)</PositionName>
<PositionID>3</PositionID>
</FW102CFilterConfigMode>
<FW102CFilterConfigMode>
<PositionName>OD1 (5240)</PositionName>
<PositionID>4</PositionID>
</FW102CFilterConfigMode>
<FW102CFilterConfigMode>
<PositionName>OD2 (5242)</PositionName>
<PositionID>5</PositionID>
</FW102CFilterConfigMode>
<FW102CFilterConfigMode>
<PositionName>OD2.5 (5243)</PositionName>
<PositionID>6</PositionID>
</FW102CFilterConfigMode>
</PositionDefined>
<SequenceDefined/>
</FW102CProfileModel>

Products

Community Treasure Hunt

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

Start Hunting!