オフィス xml で特定のノードを検索しようとしています。私はそれにwgxpathを使用しています。これが私のコードです。しかし、毎回空の結果が返されます。おそらくwgxpath は名前空間では機能しません(パラメーターとして nsResolver を受け入れますが)
Word.run(function (ctx) {
var xml = ctx.document.body.getOoxml();
ctx.sync().then(function () {
try {
var parser = new DOMParser();
var doc = parser.parseFromString(xml, "text/xml");
var win = { 'document': doc };
wgxpath.install(win);
var nsResolver = doc.createNSResolver(doc.ownerDocument == null ? doc.documentElement : doc.ownerDocument.documentElement);
var result = doc.evaluate("/pkg:package/pkg:part/pkg:xmlData/w:styles/w:docDefaults/w:pPrDefault/w:pPr/w:spacing", doc, nsResolver, win.XPathResult.ANY_TYPE, null);
var items = [];
try {
var item = result.iterateNext();
while (item) {
items.push(item);
item = result.iterateNext();
}
}
catch (e) {
reject(e);
}
resolve(items);
});
});
また、単純な xml を使用して別の例を試しました。
var parser = new DOMParser();
var test = "<pkg:count xmlns:pkg='http://schemas.microsoft.com/office/2006/xmlPackage'><pkg:a>1</pkg:a></pkg:count>";
var doc = parser.parseFromString(test, "text/xml");
var win = { 'document': doc };
wgxpath.install(win);
var nsResolver = function(prefix) {
var ns = {
'pkg': 'http://schemas.microsoft.com/office/2006/xmlPackage'
};
return ns[prefix] || null;
}
var result = doc.evaluate('/pkg:count/pkg:a', doc, nsResolver, win.XPathResult.ANY_TYPE, null);
結果は同じです。プレフィックスを使用すると空の結果が返されますが、プレフィックスを削除すると評価が機能します。
Office アドインで名前空間を使用して xml を評価するにはどうすればよいですか? 他の解決策はありますか?ActiveXObject("Microsoft.XMLDOM") を使用しようとしましたが、「オブジェクトを作成できません」という例外が発生します。