簡體   English   中英

在MATLAB中使用XPath修改XML文件

[英]Modify an XML file with XPath in MATLAB

我正在嘗試使用XPath在MATLAB中打開和修改XML文件。 這是我到目前為止編寫的代碼:

import javax.xml.xpath.*
doc = xmlread(which('myXMLfile.xml'));

factory = XPathFactory.newInstance();
xpath = factory.newXPath();
expr = xpath.compile('/data//parameter[@name=''MYPARAMETER'']/double');

nodeList = expr.evaluate(doc,XPathConstants.NODESET);
disp(char(nodeList.item(0).getFirstChild.getNodeValue))

nodeList.item(0).setNodeValue('0.03')

還有我的XML文件:

<data>
...
  <parameter name="MYPARAMETER">
    <double>0.05</double>
  </parameter>
...

disp行正確地在MATLAB命令窗口中顯示該值,這里是0.05

該腳本不會引發錯誤。 但是,未在XML文件中設置0.03值。 我在做什么錯,為什么不能使用setNodeValue命令將該值寫入文件?

編輯

如建議的那樣,可能不會保存它,因為它只是在內存中進行了修改。 我在代碼中添加了以下幾行:

factory = javax.xml.transform.TransformerFactory.newInstance();
transformer = factory.newTransformer();

writer = java.io.StringWriter();
result = javax.xml.transform.stream.StreamResult(writer);
source = javax.xml.transform.dom.DOMSource(doc);

transformer.transform(source, result);

我沒有收到任何錯誤,但是XML文件仍然沒有被修改。

編輯2

import javax.xml.xpath.*
import javax.xml.transform.*
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;

doc = xmlread(which('ImagingSensor.vpar'));

factory = XPathFactory.newInstance();
xpath = factory.newXPath();
expr = xpath.compile('/data//parameter[@name=''FOV'']/double');

nodeList = expr.evaluate(doc,XPathConstants.NODESET);
disp(char(nodeList.item(0).getFirstChild.getNodeValue))

nodeList.item(0).getFirstChild.setNodeValue('0.03')

使用nodeList.item(0).getFirstChild.setNodeValue('0.03')可以正確更改值(但仍未保存到文件中)。

使用nodeList.item(0).setNodeValue('0.03') ,它沒有正確更改值。

似乎您只在修改內存中的XML文檔對象。 最后嘗試將對象保存回XML文件。 可能是這樣的:

Transformer transformer = TransformerFactory.newInstance().newTransformer();
Result output = new StreamResult(new File("myXMLfile.xml"));
Source input = new DOMSource(myDocument);

transformer.transform(input, output);

*)我不是Java人士,還是摘自該線程的摘錄: 如何將經過解析和更改的DOM文檔保存在xml文件中?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM