Reference to non-existent field 'mathworks'

14 visualizaciones (últimos 30 días)
Jake Conley
Jake Conley el 23 de Feb. de 2017
Editada: Jan el 23 de Feb. de 2017
I've been writing Matlab code that generates XML script. I haven't run into any problems until I try to bring data from another script into the XML writing one. I have researched the problem and tried their fixes, like replacing load() with importdata(), removing all clc and clear commands, etc. The error in particular occurs on the line
docNode = com.mathworks.xml.XMLUtils.createDocument('XMLName');
Matlab gives an error "Reference to non-existent field 'mathworks'". I can't seem to find any solutions that I haven't tried and don't know what else to do. If I try running the script without any data being imported it works without any problems. What could be blocking Matlab from being able to read its own XMLUtils files? I can answer any questions you have about the code itself, but cannot upload the code for security reasons.
  4 comentarios
Geoff Hayes
Geoff Hayes el 23 de Feb. de 2017
my bad - I should have looked more closely at what I pasted (there was some auto-correction and so the method is methodsview, one word)
>> methods view com.mathworks.xml.XMLUtils
Jake Conley
Jake Conley el 23 de Feb. de 2017
Thank you for the help Geoff! Jan solved the problem, turns out I was using "com" as a variable that Matlab was trying to call in the docNode line.
Cheers!

Iniciar sesión para comentar.

Respuesta aceptada

Jan
Jan el 23 de Feb. de 2017
Editada: Jan el 23 de Feb. de 2017
Does a variable named "com" exist in your code? Perhaps it is created by a load? Check this by using the debugger: Type this in the command window
dbstop if error
and run your code again. When it stops, check "com":
which com -all
[EDITED] After your comment:
As Geoff has said already: If com is a struct, the command with the same name is shadowed and cannot be called. This is the same as:
sum = 1
sum(1:5) % error, because "sum" is a variable now
There are some solutions:
1. Use another name for the variable. This is the best.
2. Clear the variable temporarily:
comback = com;
clear('com');
docNode = com.mathworks.xml.XMLUtils.createDocument('XMLName');
com = comback; % Huh, ugly.
3. Try if builtin gets the correct function:
docNode = builtin('com.mathworks.xml.XMLUtils.createDocument', 'XMLName');
I cannot test this currently, but it does not look nice also. Prefer not to shadow builtin function names by local variables.
  4 comentarios
Jake Conley
Jake Conley el 23 de Feb. de 2017
YOU GOT IT! Congratulations! I'm an idiot apparently, hahaha. That is exactly what Matlab was trying to do. I renamed "com" and the script runs without a problem.
Thank you!
Jan
Jan el 23 de Feb. de 2017
Editada: Jan el 23 de Feb. de 2017
See [EDITED] in my answer.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Historical Contests en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by