Is there a less bug-prone way to include quote in selector string variable when defining opt.TableSelector?

3 views (last 30 days)
My situation is to readtable( ) several tables, each of which has a specific title, from an html file. I have come up with a couple solutions to define TableSelector, but it is bug prone. Is there a better way?
opt = htmlImportOptions;
opt.TableSelector = "//TABLE[contains(.,'Cash dividends')]";
headings = ["'Music'", "Photo"];
%% correct selector string, but bug prone
opt.TableSelector = "//TABLE[contains(.," + headings(1) +")]";
opt.TableSelector
ans = "//TABLE[contains(.,'Music')]"
% readtable(html, opt)
%% wrong solution
opt.TableSelector = "TABLE[contains(.,"+ headings(2) +")]";
opt.TableSelector
ans = "TABLE[contains(.,Photo)]"
% readtable(html, opt) % would return no error message, so it's a bug source.
%% fix the wrong solution
str1 = "TABLE[contains(.,'";
str2 = "')]";
opt.TableSelector = str1 + headings(2) + str2;
opt.TableSelector
ans = "TABLE[contains(.,'Photo')]"
% readtable(html, opt)
  3 Comments
Walter Roberson
Walter Roberson on 15 May 2023
Reading further, I see that we do not need to worry about "escape characters" -- for example if the user specified 'Music\' then the \' would be treated as two distinct unrelated characters, not as indicating "the next character is a literal quote". So we do not need to "sanitize" the input against an assortment of characters.
We do, however, potentially need to worry about the possibility that the headings contain ' characters or " characters.

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 17 May 2023
opt.TableSelector = "TABLE[contains(.,'" + headings(2) + "')]";
or
opt.TableSelector = compose("Table[contains(.,'%s')", headings(2));

More Answers (0)

Products


Release

R2023a

Community Treasure Hunt

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

Start Hunting!