首页 > 解决方案 > Word.CustomXMLPart API 中的“namespaceMappings”是什么意思

问题描述

我在Script Lab中创建了一个小片段,基本上:

  1. 创建自定义 XML:
<AP xmlns="accordproject.org">
  <template xmlns="acceptance-of-delivery">
    <shipper>Aman Sharma</shipper>
  </template> 
</AP>
  1. 尝试使用 xPath 查询此 xml /AP/template。我运行这段代码:
await Word.run(async context => {
  const customXmlParts = context.document.customXmlParts;
  const AP = customXmlParts.getByNamespace("accordproject.org").getOnlyItemOrNullObject();
  await context.sync();
  const nodes = AP.query('/AP/template', {}); // how does this work?
  await context.sync();
  console.log(nodes);
})
  1. 删除 customXML。

queryAPI的第二个参数是namespaceMappings. 我认为我传递错误,这就是为什么我将其作为输出(空对象)。 空数组

但是当我通过*而不是通过时/AP/template,我得到了整个 XML(而第二个参数namespaceMappings保持不变)。

我哪里错了?谁能分享一些片段来帮助我查询customXML。

标签: ms-wordoffice-jsword-addins

解决方案


简短的回答是您可以使用

const nodes = AP.query("/n1:AP/n2:template", {n1:"accordproject.org", n2:"acceptance-of-delivery"});

我根本不了解 JS/TS,但我认为这些基本上是某种键值对。你也可以使用

const nodes = AP.query("/n1:AP/n2:template", {"n1":"accordproject.org", "n2":"acceptance-of-delivery"});

如果您更愿意将命名空间前缀视为字符串。

(对于任何不熟悉的人,“n1”和“n2”只是您发明的前缀,因此您可以引用完整的命名空间 URI。它们与您在查询的 XML 片段中可能使用的任何前缀没有任何关系.)

我也找不到这方面的文档,最初假设您可能需要更像 { Prefix:"ns1", namespaceURI:"the namespace URI" } 的东西,但这只是因为这些是 VBA 模型中使用的属性名称。


推荐阅读