How to change a value in a XML-File?

11 次查看(过去 30 天)
Moritz
Moritz 2013-10-2
Hello,
i have this XML-code
<busStop id="BusStop0" lane="1to2_0" startPos="20" endPos="30"/>
<busStop id="BusStop1" lane="1to2_0" startPos="70" endPos="80"/>
<chargingStation id="ChrgStn1" lane="1to2_0" startPos="20" endPos="30" chrgPower="220"/>
I want to change the value in "chargingStation" for "startPos" and for "endPos".
How do i write in MatLab?
Thanks!!!

回答(1 个)

Alessandro
Alessandro 2013-10-2
编辑:Alessandro 2013-10-2
If I understand you right and you use the java node structure for matlab than you could use this function to replace the node:
%Function to replace a w3c node
function xmlreplacenode(node1,nodenew)
parent = node1.getParentNode;
node1.getParentNode.removeChild(xmlnode);%Delete the node
parent.appendChild(nodenew);
If not you should first parse the document with:
xDoc = xmlread(handles.tmpverzeichn);
You still need a function to generate a new node from a string maybe. For that you can try this:
%input doc is java org.w3c.dom Document
%str is a xml string
function node = parsestr2node(doc,str)
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.w3c.dom.Node;
import java.io.*;
inStream = org.xml.sax.InputSource();
inStream.setCharacterStream(java.io.StringReader(str));
docBuilderFactory = DocumentBuilderFactory.newInstance();
docBuilder = docBuilderFactory.newDocumentBuilder();
tmpdoc = docBuilder.parse (inStream);
node = doc.importNode(tmpdoc.getChildNodes.item(0),true);
If it doesn t work maybe you need some java files
  4 个评论
Heinke W
Heinke W 2021-11-4
编辑:Heinke W 2021-11-4
Hi Alessandro,
first of all I want to say thank you for your reply. I got a similar issue. I have to admit to be noob, especially when it comes to XML-syntax in matlab. That’s why I need a bit more help than others.
I have the following XML-file which is located in the folder c:\Data\Testfile.xml
<?xml version='1.0' encoding='UTF-8'?>
<tns:testBenchConfiguration>
<tns:instrumentList/>
<tns:VariableList>
<tns:Variable>
<tns:value>1</tns:value>
<tns:format>double</tns:format>
<tns:description/>
<tns:tag/>
<tns:path>Model Root/general/Value</tns:path>
<tns:guiName>approval</tns:guiName>
</tns:Variable>
</tns:VariableList>
</tns:testBenchConfiguration>
Now I want to open this XML file with matlab, change the value from "1" to "2" and save the change afterwards.
I use matlab 2015, if this is important
Robert Ungi
Robert Ungi 2022-1-3
@Heinke W this might help:
% <?xml version="1.0" encoding="utf-8"?>
% <xml>
% <busStop endPos="30" id="BusStop0" lane="1to2_0" startPos="20"/>
% <busStop endPos="80" id="BusStop1" lane="1to2_0" startPos="70"/>
% <chargingStation chrgPower="220" endPos="30" id="ChrgStn1" lane="1to2_0" startPos="45"/>
% </xml>
import javax.xml.xpath.*
factory = XPathFactory.newInstance;
import javax.script.ScriptContext;
xpath = factory.newXPath;
fXML=xmlread('SampleXML.xml');
expression = xpath.compile('xml/chargingStation[@id="ChrgStn1"]');
chargingStation = expression.evaluate(fXML, XPathConstants.NODESET);
for i=0:chargingStation.getLength-1
chargingStation.item(i).setAttribute('startPos', "45")
end
xmlwrite('SampleXMLOut.xml', fXML);
Adopted from The Wizzart.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Structured Data and XML Documents 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by