How to align xml file?
Afficher commentaires plus anciens
Hey,
I'm using
import matlab.io.xml.dom.*
doc_A = parseFile(Parser , file_A_fullPath);
doc_B = parseFile(Parser , file_B_fullPath);
to copy a Node from file_A to file_B.
I'm doing this by:
- find an existing Node in B, and remove it.
- import Node from A to B.
- append Node to B
besically it's working, BUT:
1) after removing the Node from B, I got an empty line. Can this be removed? (I know that xml doesn't care about, just for visual clarity)
2) after appending Node to B, the Node is "not properly closed", so when running it multiple time, I get a visual mixup. please see attached pics.
can this be aligned somehow? I mean, basically I'd like to do somesort of "\n" (finish line) after each appendChild action. (ModuleType)

Also,
can someone explain please the difference between readxml function and the above method?
DOMnode = xmlread(xmlfile);
docRootNode = getDocumentElement(DOMnode);
how can I use importChild , appendChild , removeChild with DOMnode and/or docRootNode?
Réponses (1)
Shimon Elkin
le 14 Fév 2022
0 votes
you can find the answer to the white space question, this is a limitation of the Saxon XML processor at the link, https://www.mathworks.com/matlabcentral/answers/94189-why-does-xmlread-introduce-extra-whitespace-into-my-xml-file [mathworks.com].
as for the second question you can use the script below:
import matlab.io.xml.dom.*
import matlab.io.xml.xpath.*
docA = parseFile(Parser,'a.xml');
stripEmptyTextNodes(docA);
config = evaluate(Evaluator,'/Configuration',docA);
modType = evaluate(Evaluator,'ModuleType',config);
removeChild(config,modType);
writer = DOMWriter;
writer.Configuration.FormatPrettyPrint = true;
writeToFile(writer,docA,'a1.xml');
function stripEmptyTextNodes(node)
import matlab.io.xml.dom.*
nodelist = getChildNodes(node);
i = 0;
while i < getLength(nodelist)
child = item(nodelist,i);
if getNodeType(child) == node.TEXT_NODE
if isempty(strtrim(getTextContent(child)))
child.getParentNode().removeChild(child);
i = i-1;
end
end
i = i+1;
stripEmptyTextNodes(child);
end
end
Catégories
En savoir plus sur Structured Data and XML Documents dans Centre d'aide et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!