Using xmlread and Document object model to get data from xml files
17 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Kumar
am 17 Aug. 2015
Beantwortet: Koti Dharmateja Addala
am 2 Jan. 2019
The following is an xml example file that we are trying to read using xmlread. Apparently xmlread converts the data into Document object model (DOM). I have searched in google and found some examples which use xmlread in matlab to get the data from xml files. But, they used very simple xml files, while the one I am using is very complex and the structure dynamically changes.
I basically want to extract some information from this xml file. For example:
1. What is the id name in the header (Ans: IED15)
2. What is the SubNetwork name? (Ans: Subnet2)
I have attached a minimum working example that I use right now. I am looking for syntax like "xRoot.getAttribute" which help me to get the information from the xml file.
Thanks in advance.
< %%Minimum working example in Matlab
xDoc = xmlread(xmlfile);
xRoot = xDoc.getDocumentElement;
xmlns_xsi = ...
char(xRoot.getAttribute('xmlns:xsi'))
id = ...
char(xRoot.getAttribute('xsi:noNamespaceSchemaLocation'))
%------------------------------------------------------------>
href = ""<SCL xmlns:xsi="C:\Users\Schema Defintion\xml schema test.xsd" xsi:noNamespaceSchemaLocation="http://www.mathworks.com/namespace/info/v1/info.xsd"</a>
<Header id="IED15" nameStructure="IEDName" revision="R 001" toolID="Manual" version="">
<History>
<Hitem revision="R 001" version="V 0.0" what="test" when="Tue Jun 09 10:19:00 EDT 2015" who="wdk" why=""/>
</History>
</Header>
<Communication>
<SubNetwork name="Subnet2" type="8-MMS">
<ConnectedAP apName="AP15" iedName="IED15">
<Address>
<P type="IP">192.168.48.15</P>
<P type="OSI-AP-Title">1,3,9999,23</P>
<P type="IP-SUBNET">255.255.255.0</P>
<P type="OSI-AE-Qualifier">15</P>
<P type="OSI-AP-Invoke">10</P>
<P type="OSI-AE-Invoke">10</P>
<P type="OSI-PSEL">00000001</P>
<P type="OSI-SSEL">0001</P>
<P type="OSI-TSEL">0001</P>
</Address>
<PhysConn type="Connection">
<P type="Type"> 100BaseT</P>
</PhysConn>
</ConnectedAP>
</SubNetwork>
</Communication>
<IED name="IED15" configVersion="1.0" manufacturer="UTK" type="Default">
<AccessPoint name="AP15">
<Server>
<Authentication none="true"/>
<LDevice inst="L1">
<LN0 lnType="lln0_node" inst="" lnClass="LLN0"/>
<LN lnType="lphd_node" inst="1" lnClass="LPHD"/>
<LN lnType="mmxu_node" inst="1" lnClass="MMXU"/>
<LN lnType="drcc_node" inst="1" lnClass="DRCC"/>
<LN lnType="zbat_node" inst="1" lnClass="ZBAT"/>
</LDevice>
</Server>
</AccessPoint>
</IED>
<DataTypeTemplates>
<LNodeType id="lphd_node" lnClass="LPHD">
<DO accessControl="" name="PhyHealth" type="INS" transient="false"/>
<DO accessControl="" name="Proxy" type="SPS" transient="false"/>
</LNodeType>
<LNodeType id="mmxu_node" lnClass="MMXU">
<DO accessControl="" name="PhV" type="WYE" transient="false"/>
<DO accessControl="" name="W" type="WYE" transient="false"/>
<DO accessControl="" name="VAr" type="WYE" transient="false"/>
</LNodeType>
<LNodeType id="drcc_node" lnClass="DRCC">
<DO accessControl="" name="OutWSet" type="APC" transient="false"/>
<DO accessControl="" name="OutVarSet" type="APC" transient="false"/>
<DO accessControl="" name="DERStr" type="SPC" transient="false"/>
<DO accessControl="" name="DERStop" type="SPC" transient="false"/>
<DO accessControl="" name="AutoManCtl" type="SPC" transient="false"/>
<DO accessControl="" name="LocRemCtl" type="SPC" transient="false"/>
</LNodeType>
<LNodeType id="zbat_node" lnClass="ZBAT">
<DO accessControl="" name="BatSt" type="SPS" transient="false"/>
<DO accessControl="" name="BatTestRsl" type="SPS" transient="false"/>
<DO accessControl="" name="BatVHi" type="SPS" transient="false"/>
<DO accessControl="" name="BatVLo" type="SPS" transient="false"/>
<DO accessControl="" name="BatTyp" type="ENG_BatTyp" transient="false"/>
<DO accessControl="" name="AhrRtg" type="ASG" transient="false"/>
<DO accessControl="" name="MinAhrRtg" type="ASG" transient="false"/>
<DO accessControl="" name="BatVNom" type="ASG" transient="false"/>
<DO accessControl="" name="BatSerCnt" type="ING" transient="false"/>
<DO accessControl="" name="BatParCnt" type="ING" transient="false"/>
<DO accessControl="" name="DisChaRte" type="ASG" transient="false"/>
<DO accessControl="" name="MaxBatA" type="ASG" transient="false"/>
<DO accessControl="" name="MaxChaV" type="ASG" transient="false"/>
<DO accessControl="" name="HiBatVAlm" type="ASG" transient="false"/>
<DO accessControl="" name="LoBatVAlm" type="ASG" transient="false"/>
<DO accessControl="" name="Vol" type="MV" transient="false"/>
<DO accessControl="" name="VolChgRte" type="MV" transient="false"/>
<DO accessControl="" name="InBatV" type="MV" transient="false"/>
<DO accessControl="" name="Amp" type="MV" transient="false"/>
<DO accessControl="" name="InBatA" type="MV" transient="false"/>
<DO accessControl="" name="InBatTmp" type="MV" transient="false"/>
<DO accessControl="" name="BatOn" type="SPC" transient="false"/>
<DO accessControl="" name="BatTest" type="SPC" transient="false"/>
</LNodeType>
<LNodeType id="lln0_node" lnClass="LLN0">
<DO accessControl="" name="Mod" type="INC" transient="false"/>
<DO accessControl="" name="Beh" type="INS" transient="false"/>
<DO accessControl="" name="Loc" type="SPS" transient="false"/>
</LNodeType>
<DOType id="APC" cdc="APC">
<DA bType="Struct" name="setMag" type="AnalogueValue" fc="SP"/>
<DA bType="Quality" name="q" type="" fc="ST" qchg="true"/>
<DA bType="Timestamp" name="t" type="" fc="ST"/>
<DA bType="Enum" name="ctlModel" type="ctlModel" fc="CF"/>
</DOType>
<DOType id="ASG" cdc="ASG">
<DA bType="Struct" name="setMag" type="AnalogueValue" fc="SP"/>
</DOType>
<DOType id="ENG_BatTyp" cdc="ENG">
<DA bType="Enum" name="stVal" type="BatTyp" fc="SP"/>
</DOType>
<DOType id="INC" cdc="INC">
<DA bType="INT32" name="ctlVal" type="" fc="CO"/>
<DA bType="INT32" name="stVal" type="" dchg="true" fc="ST"/>
<DA bType="Quality" name="q" type="" fc="ST" qchg="true"/>
<DA bType="Timestamp" name="t" type="" fc="ST"/>
<DA bType="Enum" name="ctlModel" type="ctlModel" fc="CF"/>
</DOType>
<DOType id="ING" cdc="ING">
<DA bType="INT32" name="setVal" type="" fc="SP"/>
</DOType>
<DOType id="INS" cdc="INS">
<DA bType="INT32" name="stVal" type="" dchg="true" fc="ST"/>
<DA bType="Quality" name="q" type="" fc="ST" qchg="true"/>
<DA bType="Timestamp" name="t" type="" fc="ST"/>
</DOType>
<DOType id="SPC" cdc="SPC">
<DA bType="BOOLEAN" name="ctlVal" type="" fc="CO"/>
<DA bType="Quality" name="q" type="" fc="ST" qchg="true"/>
<DA bType="Timestamp" name="t" type="" fc="ST"/>
<DA bType="Enum" name="ctlModel" type="ctlModel" fc="CF"/>
</DOType>
<DOType id="SPS" cdc="SPS">
<DA bType="BOOLEAN" name="stVal" type="" dchg="true" fc="ST"/>
<DA bType="Quality" name="q" type="" fc="ST" qchg="true"/>
<DA bType="Timestamp" name="t" type="" fc="ST"/>
</DOType>
<DOType id="CMV" cdc="CMV">
<DA bType="Struct" name="cVal" type="Vector" dchg="true" fc="MX"/>
<DA bType="Quality" name="q" type="" fc="MX" qchg="true"/>
<DA bType="Timestamp" name="t" type="" fc="MX"/>
</DOType>
<DOType id="MV" cdc="MV">
<DA name="instMag" bType="Struct" type="AnalogueValue" fc="MX"/>
<DA name="mag" bType="Struct" type="AnalogueValue" dchg="true" fc="MX"/>
<DA bType="Quality" name="q" type="" fc="MX" qchg="true"/>
<DA bType="Timestamp" name="t" type="" fc="MX"/>
</DOType>
<DOType id="WYE" cdc="WYE">
<SDO name="phsA" type="CMV"/>
<SDO name="phsB" type="CMV"/>
<SDO name="phsC" type="CMV"/>
</DOType>
<DOType id="INC" cdc="INC">
<DA bType="INT32" name="stVal" type="" dchg="true" fc="ST"/>
<DA bType="Quality" name="q" type="" fc="ST" qchg="true"/>
<DA bType="Timestamp" name="t" type="" fc="ST"/>
</DOType>
<DAType id="Vector">
<BDA bType="Struct" name="mag" type="AnalogueValue"/>
</DAType>
<DAType id="AnalogueValue">
<BDA name="f" bType="FLOAT32" />
</DAType>
<EnumType id="ctlModel">
<EnumVal ord="0">status-only</EnumVal>
<EnumVal ord="1">direct-with-normal-security</EnumVal>
<EnumVal ord="2">sbo-with-normal-security</EnumVal>
<EnumVal ord="3">direct-with-enhanced-security</EnumVal>
<EnumVal ord="4">sbo-with-enhanced-security</EnumVal>
</EnumType>
<EnumType id="BatTyp">
<EnumVal ord="0">Not applicable/Unknown</EnumVal>
<EnumVal ord="1">Lead-acid</EnumVal>
<EnumVal ord="2">Nickel-metal hydrate (NiMH)</EnumVal>
<EnumVal ord="3">Nickel-cadmium (NiCad)</EnumVal>
<EnumVal ord="4">Lithium</EnumVal>
<EnumVal ord="5">Carbon zinc</EnumVal>
<EnumVal ord="6">Zinc chloride</EnumVal>
<EnumVal ord="7">Alkaline</EnumVal>
<EnumVal ord="8">Rechargeable alkaline</EnumVal>
<EnumVal ord="9">Sodium sulphur (NaS)</EnumVal>
<EnumVal ord="10">Flow</EnumVal>
<EnumVal ord="99">Other</EnumVal>
</EnumType>
</DataTypeTemplates>
</SCL>
>
0 Kommentare
Akzeptierte Antwort
Kelly Kearney
am 17 Aug. 2015
The DOM format is definitely not intuitive for someone without much object-oriented experience (like me), but I've found I can usually get the basics out of it using getElementsByTagName, recursing down if necessary. For your case,
xdoc = xmlread('test.xml');
header = xdoc.getElementsByTagName('Header');
id = char(header.item(0).getAttribute('id'));
com = xdoc.getElementsByTagName('Communication');
sub = com.item(0).getElementsByTagName('SubNetwork');
subname = char(sub.item(0).getAttribute('name'));
produces:
id =
IED15
subname =
Subnet2
Weitere Antworten (1)
Koti Dharmateja Addala
am 2 Jan. 2019
In addition to the above question..
How to identify '' DERStop is off type APC or SPC ".
Thanks in advance.
0 Kommentare
Siehe auch
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!