Changing values in an existing XML file

25 次查看(过去 30 天)
Hi All,
I am fairly new to using matlab to parse through an XML file. I have an exisiting XML file that I am looking to change certain values. I am able to access the a level above the information that I actually want. I am unable to figure out how to alter the Location of each to the "Force Set" and also read the Body string so that I can do a logical comparision.
When I try to get the Location text content (variable: data) I get an error saying "Dot indexing is not supported for variables of this type."
<ForceSet>
<objects>
<Thelen2003Muscle name="LVS">
<!--Flag indicating whether the force is disabled or not. Disabled means that the force is not active in subsequent dynamics realizations.-->
<isDisabled>false</isDisabled>
<!--The set of points defining the path of the muscle.-->
<GeometryPath>
<!--The set of points defining the path-->
<PathPointSet>
<objects>
<PathPoint name="DELT2-P2">
<location> -0.037263 0.0944378 0.0225438</location>
<body>thorax</body>
</PathPoint>
<PathPoint name="DELT2-P3">
<location> -0.0676471 0.000672336 -0.0956535</location>
<body>scapula</body>
</PathPoint>
</objects>
</PathPointSet>
xmlfile = fullfile('Model.xml');
DOMnode = xmlread(xmlfile);
ForceSet = DOMnode.getElementsByTagName('ForceSet');
Muscle = ForceSet.item(0).getElementsByTagName('Thelen2003Muscle'); % Level that contains all the muscles
no_Musc_idx = Muscle.getLength-1 % Determines the max number of muscles
for i = 0 : no_Musc_idx % Changes what muscle we are looking at (Range : [0,25])
Muscle_name = char(Muscle.item(i).getAttribute('name')) % returns the muscle name 0 - "LVS", 1 - "TRP1"
GeometryPath = Muscle.item(i).getElementsByTagName('GeometryPath');
PathPointSet = GeometryPath.item(0).getElementsByTagName('PathPointSet');
PathPoint = PathPointSet.item(0).getElementsByTagName('PathPoint');
for j =0: PathPoint.getLength -1 % goes through the muscle attachment points
attachmentPoint_name= char(PathPoint.item(j).getAttribute('name')) % The name of the of node its looking at
KidNode = PathPoint.item(j).getTextContent %Prints out both the children nodes...
Location = PathPoint.item(0).getElementsByTagName('Location');
data = Location.item(0).getTextContent %trying to access the location value
end
% class(Location.item(0)) % This lets us know that the answer is a double.... I THINK?!?
% PathPoint.item(j).setTextContent('0 0 0 0') % Sort of works but
% changes the whole node and does not isolate the children nodes
end
  1 个评论
Robert Ungi
Robert Ungi 2022-1-11
This might help https://www.thewizz.art/2022/01/06/how-to-modify-an-xml-attribute-value-using-matlab/

请先登录,再进行评论。

回答(1 个)

Abhishek Gupta
Abhishek Gupta 2020-9-7
Hi Natasha,
The reason for getting the error is that there is no element with the tag name 'Location' (it's 'location').
You can make the following changes in your code: -
From
Location = PathPoint.item(0).getElementsByTagName('Location');
To
Location = PathPoint.item(0).getElementsByTagName('location');
Referring to the following link, which might help you in changing values in the XML file: -

类别

Help CenterFile Exchange 中查找有关 Workspace Variables and MAT-Files 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by