Word.CustomXmlPart class

表示自定义 XML 部件。

扩展

注解

[ API 集:WordApi 1.4 ]

属性

context

与 对象关联的请求上下文。 这会将加载项的进程连接到 Office 主机应用程序的进程。

id

获取自定义 XML 部件的 ID。

namespaceUri

获取自定义 XML 部件的命名空间 URI。

方法

delete()

删除自定义 XML 部件。

deleteAttribute(xpath, namespaceMappings, name)

从 xpath 标识的元素中删除具有给定名称的属性。

deleteElement(xpath, namespaceMappings)

删除 xpath 标识的元素。

getXml()

获取自定义 XML 部件的完整 XML 内容。

insertAttribute(xpath, namespaceMappings, name, value)

将具有给定名称和值的特性插入 xpath 标识的元素。

insertElement(xpath, xml, namespaceMappings, index)

在子位置索引处 xpath 标识的父元素下插入给定的 XML。

load(options)

将命令加入队列以加载对象的指定属性。 阅读属性前必须先调用 context.sync()

load(propertyNames)

将命令加入队列以加载对象的指定属性。 阅读属性前必须先调用 context.sync()

load(propertyNamesAndPaths)

将命令加入队列以加载对象的指定属性。 阅读属性前必须先调用 context.sync()

query(xpath, namespaceMappings)

查询自定义 XML 部件的 XML 内容。

setXml(xml)

设置自定义 XML 部件的完整 XML 内容。

toJSON()

重写 JavaScript toJSON() 方法,以便在将 API 对象传递给 JSON.stringify()时提供更有用的输出。 JSON.stringify (,反过来又调用toJSON传递给它的 对象的 方法。) 而原始Word.CustomXmlPart对象是 API 对象,toJSON该方法返回一个纯 JavaScript 对象, (类型为 Word.Interfaces.CustomXmlPartData) ,其中包含原始对象中任何已加载子属性的浅表副本。

track()

根据文档中的相应更改来跟踪对象,以便进行自动调整。 此调用是 context.trackedObjects.add (thisObject) 的简写。 如果跨 .sync 调用和“.run”批处理的顺序执行外部使用此对象,并在设置属性或调用对象方法时收到“InvalidObjectPath”错误,则需要在首次创建对象时将该对象添加到跟踪的对象集合。 如果此对象是集合的一部分,则还应跟踪父集合。

untrack()

释放与此对象关联的内存(如果先前已跟踪过)。 此调用是 context.trackedObjects.remove (thisObject) 的简写。 拥有许多跟踪对象会降低主机应用程序的速度,因此请在使用完毕后释放所添加的任何对象。 在内存发布生效之前,需要调用 context.sync()

updateAttribute(xpath, namespaceMappings, name, value)

使用 xpath 标识的元素的给定名称更新特性的值。

updateElement(xpath, xml, namespaceMappings)

更新 xpath 标识的元素的 XML。

属性详细信息

context

与 对象关联的请求上下文。 这会将加载项的进程连接到 Office 主机应用程序的进程。

context: RequestContext;

属性值

id

获取自定义 XML 部件的 ID。

readonly id: string;

属性值

string

注解

[ API 集:WordApi 1.4 ]

示例

// Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml

// Adds a custom XML part.
await Word.run(async (context) => {
  const originalXml =
    "<Reviewers><Reviewer>Juan</Reviewer><Reviewer>Hong</Reviewer><Reviewer>Sally</Reviewer></Reviewers>";
  const customXmlPart: Word.CustomXmlPart = context.document.customXmlParts.add(originalXml);
  customXmlPart.load("id");
  const xmlBlob = customXmlPart.getXml();

  await context.sync();

  const readableXml = addLineBreaksToXML(xmlBlob.value);
  console.log("Added custom XML part:", readableXml);

  // Store the XML part's ID in a setting so the ID is available to other functions.
  const settings: Word.SettingCollection = context.document.settings;
  settings.add("ContosoReviewXmlPartId", customXmlPart.id);

  await context.sync();
});

namespaceUri

获取自定义 XML 部件的命名空间 URI。

readonly namespaceUri: string;

属性值

string

注解

[ API 集:WordApi 1.4 ]

示例

// Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml

// Original XML: <Reviewers xmlns='http://schemas.contoso.com/review/1.0'><Reviewer>Juan</Reviewer><Reviewer>Hong</Reviewer><Reviewer>Sally</Reviewer></Reviewers>

// Gets the namespace URI from a custom XML part.
await Word.run(async (context) => {
  const settings: Word.SettingCollection = context.document.settings;
  const xmlPartIDSetting: Word.Setting = settings.getItemOrNullObject("ContosoReviewXmlPartIdNS").load("value");

  await context.sync();

  if (xmlPartIDSetting.value) {
    const customXmlPart: Word.CustomXmlPart = context.document.customXmlParts.getItem(xmlPartIDSetting.value);
    customXmlPart.load("namespaceUri");
    await context.sync();

    const namespaceUri = customXmlPart.namespaceUri;
    console.log(`Namespace URI: ${JSON.stringify(namespaceUri)}`);
  } else {
    console.warn("Didn't find custom XML part.");
  }
});

方法详细信息

delete()

删除自定义 XML 部件。

delete(): void;

返回

void

注解

[ API 集:WordApi 1.4 ]

示例

// Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml

// Original XML: <Reviewers><Reviewer>Juan</Reviewer><Reviewer>Hong</Reviewer><Reviewer>Sally</Reviewer></Reviewers>

// Deletes a custom XML part.
await Word.run(async (context) => {
  const settings: Word.SettingCollection = context.document.settings;
  const xmlPartIDSetting: Word.Setting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value");
  await context.sync();

  if (xmlPartIDSetting.value) {
    let customXmlPart: Word.CustomXmlPart = context.document.customXmlParts.getItem(xmlPartIDSetting.value);
    const xmlBlob = customXmlPart.getXml();
    customXmlPart.delete();
    customXmlPart = context.document.customXmlParts.getItemOrNullObject(xmlPartIDSetting.value);

    await context.sync();

    if (customXmlPart.isNullObject) {
      console.log(`The XML part with the ID ${xmlPartIDSetting.value} has been deleted.`);

      // Delete the associated setting too.
      xmlPartIDSetting.delete();

      await context.sync();
    } else {
      const readableXml = addLineBreaksToXML(xmlBlob.value);
      console.error(`This is strange. The XML part with the id ${xmlPartIDSetting.value} wasn't deleted:`, readableXml);
    }
  } else {
    console.warn("Didn't find custom XML part to delete.");
  }
});

...

// Original XML: <Reviewers xmlns='http://schemas.contoso.com/review/1.0'><Reviewer>Juan</Reviewer><Reviewer>Hong</Reviewer><Reviewer>Sally</Reviewer></Reviewers>

// Deletes a custom XML part.
await Word.run(async (context) => {
  const settings: Word.SettingCollection = context.document.settings;
  const xmlPartIDSetting: Word.Setting = settings.getItemOrNullObject("ContosoReviewXmlPartIdNS").load("value");
  await context.sync();

  if (xmlPartIDSetting.value) {
    let customXmlPart: Word.CustomXmlPart = context.document.customXmlParts.getItem(xmlPartIDSetting.value);
    const xmlBlob = customXmlPart.getXml();
    customXmlPart.delete();
    customXmlPart = context.document.customXmlParts.getItemOrNullObject(xmlPartIDSetting.value);

    await context.sync();

    if (customXmlPart.isNullObject) {
      console.log(`The XML part with the ID ${xmlPartIDSetting.value} has been deleted.`);

      // Delete the associated setting too.
      xmlPartIDSetting.delete();

      await context.sync();
    } else {
      const readableXml = addLineBreaksToXML(xmlBlob.value);
      console.error(
        `This is strange. The XML part with the id ${xmlPartIDSetting.value} wasn't deleted:`,
        readableXml
      );
    }
  } else {
    console.warn("Didn't find custom XML part to delete.");
  }
});

deleteAttribute(xpath, namespaceMappings, name)

从 xpath 标识的元素中删除具有给定名称的属性。

deleteAttribute(xpath: string, namespaceMappings: {
            [key: string]: string;
        }, name: string): void;

参数

xpath

string

必填。 XPath 表示法中单个元素的绝对路径。

namespaceMappings

{ [key: string]: string; }

必填。 一个 对象,其属性值是命名空间名称,其属性名称是相应命名空间的别名。 例如, {greg: "http://calendartypes.org/xsds/GregorianCalendar"}。 属性名称 ((如“greg”) )可以是不使用 XPath 保留字符的任何字符串,例如正斜杠“/”。

name

string

必填。 属性的名称。

返回

void

注解

[ API 集:WordApi 1.4 ]

如果树中的任何元素具有 xmlns 属性 (其值通常为但并非始终为 URI) ,则该属性值的别名必须在 xpath 参数中的元素名称作为前缀。 例如,假设树如下所示:

<Day>
  <Month xmlns="http://calendartypes.org/xsds/GregorianCalendar">
    <Week>something</Week>
  </Month>
</Day>

<Week> xpath 必须为 /Day/greg:Month/Week,其中 greg 是映射到 namespaceMappings 参数中的“http://calendartypes.org/xsds/GregorianCalendar”的别名。

deleteElement(xpath, namespaceMappings)

删除 xpath 标识的元素。

deleteElement(xpath: string, namespaceMappings: {
            [key: string]: string;
        }): void;

参数

xpath

string

必填。 XPath 表示法中单个元素的绝对路径。

namespaceMappings

{ [key: string]: string; }

必填。 一个 对象,其属性值是命名空间名称,其属性名称是相应命名空间的别名。 例如, {greg: "http://calendartypes.org/xsds/GregorianCalendar"}。 属性名称 ((如“greg”) )可以是不使用 XPath 保留字符的任何字符串,例如正斜杠“/”。

返回

void

注解

[ API 集:WordApi 1.4 ]

如果树中的任何元素具有 xmlns 属性 (其值通常为但并非始终为 URI) ,则该属性值的别名必须在 xpath 参数中的元素名称作为前缀。 例如,假设树如下所示:

<Day>
  <Month xmlns="http://calendartypes.org/xsds/GregorianCalendar">
    <Week>something</Week>
  </Month>
</Day>

<Week> xpath 必须为 /Day/greg:Month/Week,其中 greg 是映射到 namespaceMappings 参数中的“http://calendartypes.org/xsds/GregorianCalendar”的别名。

getXml()

获取自定义 XML 部件的完整 XML 内容。

getXml(): OfficeExtension.ClientResult<string>;

返回

注解

[ API 集:WordApi 1.4 ]

示例

// Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml

// Adds a custom XML part.
// If you want to populate the CustomXml.namespaceUri property, you must include the xmlns attribute.
await Word.run(async (context) => {
  const originalXml =
    "<Reviewers xmlns='http://schemas.contoso.com/review/1.0'><Reviewer>Juan</Reviewer><Reviewer>Hong</Reviewer><Reviewer>Sally</Reviewer></Reviewers>";
  const customXmlPart = context.document.customXmlParts.add(originalXml);
  customXmlPart.load(["id", "namespaceUri"]);
  const xmlBlob = customXmlPart.getXml();

  await context.sync();

  const readableXml = addLineBreaksToXML(xmlBlob.value);
  console.log(`Added custom XML part with namespace URI ${customXmlPart.namespaceUri}:`, readableXml);

  // Store the XML part's ID in a setting so the ID is available to other functions.
  const settings: Word.SettingCollection = context.document.settings;
  settings.add("ContosoReviewXmlPartIdNS", customXmlPart.id);

  await context.sync();
});

...

// Adds a custom XML part.
await Word.run(async (context) => {
  const originalXml =
    "<Reviewers><Reviewer>Juan</Reviewer><Reviewer>Hong</Reviewer><Reviewer>Sally</Reviewer></Reviewers>";
  const customXmlPart: Word.CustomXmlPart = context.document.customXmlParts.add(originalXml);
  customXmlPart.load("id");
  const xmlBlob = customXmlPart.getXml();

  await context.sync();

  const readableXml = addLineBreaksToXML(xmlBlob.value);
  console.log("Added custom XML part:", readableXml);

  // Store the XML part's ID in a setting so the ID is available to other functions.
  const settings: Word.SettingCollection = context.document.settings;
  settings.add("ContosoReviewXmlPartId", customXmlPart.id);

  await context.sync();
});

insertAttribute(xpath, namespaceMappings, name, value)

将具有给定名称和值的特性插入 xpath 标识的元素。

insertAttribute(xpath: string, namespaceMappings: {
            [key: string]: string;
        }, name: string, value: string): void;

参数

xpath

string

必填。 XPath 表示法中单个元素的绝对路径。

namespaceMappings

{ [key: string]: string; }

必填。 一个 对象,其属性值是命名空间名称,其属性名称是相应命名空间的别名。 例如, {greg: "http://calendartypes.org/xsds/GregorianCalendar"}。 属性名称 ((如“greg”) )可以是不使用 XPath 保留字符的任何字符串,例如正斜杠“/”。

name

string

必填。 属性的名称。

value

string

必填。 属性的值。

返回

void

注解

[ API 集:WordApi 1.4 ]

如果树中的任何元素具有 xmlns 属性 (其值通常为但并非始终为 URI) ,则该属性值的别名必须在 xpath 参数中的元素名称作为前缀。 例如,假设树如下所示:

<Day>
  <Month xmlns="http://calendartypes.org/xsds/GregorianCalendar">
    <Week>something</Week>
  </Month>
</Day>

<Week> xpath 必须为 /Day/greg:Month/Week,其中 greg 是映射到 namespaceMappings 参数中的“http://calendartypes.org/xsds/GregorianCalendar”的别名。

示例

// Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml

// Original XML: <Reviewers xmlns='http://schemas.contoso.com/review/1.0'><Reviewer>Juan</Reviewer><Reviewer>Hong</Reviewer><Reviewer>Sally</Reviewer></Reviewers>

// Inserts an attribute into a custom XML part.
await Word.run(async (context) => {
  const settings: Word.SettingCollection = context.document.settings;
  const xmlPartIDSetting: Word.Setting = settings.getItemOrNullObject("ContosoReviewXmlPartIdNS").load("value");
  await context.sync();

  if (xmlPartIDSetting.value) {
    const customXmlPart: Word.CustomXmlPart = context.document.customXmlParts.getItem(xmlPartIDSetting.value);

    // The insertAttribute method inserts an attribute with the given name and value into the element identified by the xpath parameter.
    customXmlPart.insertAttribute(
      "/contoso:Reviewers",
      { contoso: "http://schemas.contoso.com/review/1.0" },
      "Nation",
      "US"
    );
    const xmlBlob = customXmlPart.getXml();
    await context.sync();

    const readableXml = addLineBreaksToXML(xmlBlob.value);
    console.log("Successfully inserted attribute:", readableXml);
  } else {
    console.warn("Didn't find custom XML part to insert attribute into.");
  }
});

...

// Original XML: <Reviewers><Reviewer>Juan</Reviewer><Reviewer>Hong</Reviewer><Reviewer>Sally</Reviewer></Reviewers>

// Inserts an attribute into a custom XML part.
await Word.run(async (context) => {
  const settings: Word.SettingCollection = context.document.settings;
  const xmlPartIDSetting: Word.Setting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value");
  await context.sync();

  if (xmlPartIDSetting.value) {
    const customXmlPart: Word.CustomXmlPart = context.document.customXmlParts.getItem(xmlPartIDSetting.value);

    // The insertAttribute method inserts an attribute with the given name and value into the element identified by the xpath parameter.
    customXmlPart.insertAttribute("/Reviewers", { contoso: "http://schemas.contoso.com/review/1.0" }, "Nation", "US");
    const xmlBlob = customXmlPart.getXml();
    await context.sync();

    const readableXml = addLineBreaksToXML(xmlBlob.value);
    console.log("Successfully inserted attribute:", readableXml);
  } else {
    console.warn("Didn't find custom XML part to insert attribute into.");
  }
});

insertElement(xpath, xml, namespaceMappings, index)

在子位置索引处 xpath 标识的父元素下插入给定的 XML。

insertElement(xpath: string, xml: string, namespaceMappings: {
            [key: string]: string;
        }, index?: number): void;

参数

xpath

string

必填。 XPath 表示法中单个父元素的绝对路径。

xml

string

必填。 要插入的 XML 内容。

namespaceMappings

{ [key: string]: string; }

必填。 一个 对象,其属性值是命名空间名称,其属性名称是相应命名空间的别名。 例如, {greg: "http://calendartypes.org/xsds/GregorianCalendar"}。 属性名称 ((如“greg”) )可以是不使用 XPath 保留字符的任何字符串,例如正斜杠“/”。

index

number

可选。 要插入新 XML 的位置从零开始。 如果省略,XML 将作为此父级的最后一个子项追加。

返回

void

注解

[ API 集:WordApi 1.4 ]

如果树中的任何元素具有 xmlns 属性 (其值通常为但并非始终为 URI) ,则该属性值的别名必须在 xpath 参数中的元素名称作为前缀。 例如,假设树如下所示:

<Day>
  <Month xmlns="http://calendartypes.org/xsds/GregorianCalendar">
    <Week>something</Week>
  </Month>
</Day>

<Week> xpath 必须为 /Day/greg:Month/Week,其中 greg 是映射到 namespaceMappings 参数中的“http://calendartypes.org/xsds/GregorianCalendar”的别名。

示例

// Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml

// Original XML: <Reviewers xmlns='http://schemas.contoso.com/review/1.0'><Reviewer>Juan</Reviewer><Reviewer>Hong</Reviewer><Reviewer>Sally</Reviewer></Reviewers>

// Inserts an element into a custom XML part.
await Word.run(async (context) => {
  const settings: Word.SettingCollection = context.document.settings;
  const xmlPartIDSetting: Word.Setting = settings.getItemOrNullObject("ContosoReviewXmlPartIdNS").load("value");
  await context.sync();

  if (xmlPartIDSetting.value) {
    const customXmlPart: Word.CustomXmlPart = context.document.customXmlParts.getItem(xmlPartIDSetting.value);

    // The insertElement method inserts the given XML under the parent element identified by the xpath parameter at the provided child position index.
    customXmlPart.insertElement(
      "/contoso:Reviewers",
      "<Lead>Mark</Lead>",
      { contoso: "http://schemas.contoso.com/review/1.0" },
      0
    );
    const xmlBlob = customXmlPart.getXml();
    await context.sync();

    const readableXml = addLineBreaksToXML(xmlBlob.value);
    console.log("Successfully inserted element:", readableXml);
  } else {
    console.warn("Didn't find custom XML part to insert element into.");
  }
});

...

// Original XML: <Reviewers><Reviewer>Juan</Reviewer><Reviewer>Hong</Reviewer><Reviewer>Sally</Reviewer></Reviewers>

// Inserts an element into a custom XML part.
await Word.run(async (context) => {
  const settings: Word.SettingCollection = context.document.settings;
  const xmlPartIDSetting: Word.Setting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value");
  await context.sync();

  if (xmlPartIDSetting.value) {
    const customXmlPart: Word.CustomXmlPart = context.document.customXmlParts.getItem(xmlPartIDSetting.value);

    // The insertElement method inserts the given XML under the parent element identified by the xpath parameter at the provided child position index.
    customXmlPart.insertElement(
      "/Reviewers",
      "<Lead>Mark</Lead>",
      { contoso: "http://schemas.contoso.com/review/1.0" },
      0
    );
    const xmlBlob = customXmlPart.getXml();
    await context.sync();

    const readableXml = addLineBreaksToXML(xmlBlob.value);
    console.log("Successfully inserted element:", readableXml);
  } else {
    console.warn("Didn't find custom XML part to insert element into.");
  }
});

load(options)

将命令加入队列以加载对象的指定属性。 阅读属性前必须先调用 context.sync()

load(options?: Word.Interfaces.CustomXmlPartLoadOptions): Word.CustomXmlPart;

参数

options
Word.Interfaces.CustomXmlPartLoadOptions

提供要加载对象的属性的选项。

返回

load(propertyNames)

将命令加入队列以加载对象的指定属性。 阅读属性前必须先调用 context.sync()

load(propertyNames?: string | string[]): Word.CustomXmlPart;

参数

propertyNames

string | string[]

逗号分隔的字符串或指定要加载的属性的字符串数组。

返回

load(propertyNamesAndPaths)

将命令加入队列以加载对象的指定属性。 阅读属性前必须先调用 context.sync()

load(propertyNamesAndPaths?: {
            select?: string;
            expand?: string;
        }): Word.CustomXmlPart;

参数

propertyNamesAndPaths

{ select?: string; expand?: string; }

propertyNamesAndPaths.select 是一个逗号分隔的字符串,指定要加载的属性,是 propertyNamesAndPaths.expand 一个逗号分隔的字符串,指定要加载的导航属性。

返回

query(xpath, namespaceMappings)

查询自定义 XML 部件的 XML 内容。

query(xpath: string, namespaceMappings: {
            [key: string]: string;
        }): OfficeExtension.ClientResult<string[]>;

参数

xpath

string

必填。 XPath 查询。

namespaceMappings

{ [key: string]: string; }

必填。 一个 对象,其属性值是命名空间名称,其属性名称是相应命名空间的别名。 例如, {greg: "http://calendartypes.org/xsds/GregorianCalendar"}。 属性名称 ((如“greg”) )可以是不使用 XPath 保留字符的任何字符串,例如正斜杠“/”。

返回

一个数组,其中每个项表示 XPath 查询匹配的条目。

注解

[ API 集:WordApi 1.4 ]

如果树中的任何元素具有 xmlns 属性 (其值通常为但并非始终为 URI) ,则该属性值的别名必须在 xpath 参数中的元素名称作为前缀。 例如,假设树如下所示:

<Day>
  <Month xmlns="http://calendartypes.org/xsds/GregorianCalendar">
    <Week>something</Week>
  </Month>
</Day>

<Week> xpath 必须为 /Day/greg:Month/Week,其中 greg 是映射到 namespaceMappings 参数中的“http://calendartypes.org/xsds/GregorianCalendar”的别名。

示例

// Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml

// Original XML: <Reviewers xmlns='http://schemas.contoso.com/review/1.0'><Reviewer>Juan</Reviewer><Reviewer>Hong</Reviewer><Reviewer>Sally</Reviewer></Reviewers>

// Queries a custom XML part for elements matching the search terms.
await Word.run(async (context) => {
  const settings: Word.SettingCollection = context.document.settings;
  const xmlPartIDSetting: Word.Setting = settings.getItemOrNullObject("ContosoReviewXmlPartIdNS").load("value");

  await context.sync();

  if (xmlPartIDSetting.value) {
    const customXmlPart: Word.CustomXmlPart = context.document.customXmlParts.getItem(xmlPartIDSetting.value);
    const xpathToQueryFor = "/contoso:Reviewers";
    const clientResult = customXmlPart.query(xpathToQueryFor, {
      contoso: "http://schemas.contoso.com/review/1.0"
    });

    await context.sync();

    console.log(`Queried custom XML part for ${xpathToQueryFor} and found ${clientResult.value.length} matches:`);
    for (let i = 0; i < clientResult.value.length; i++) {
      console.log(clientResult.value[i]);
    }
  } else {
    console.warn("Didn't find custom XML part to query.");
  }
});

...

// Original XML: <Reviewers><Reviewer>Juan</Reviewer><Reviewer>Hong</Reviewer><Reviewer>Sally</Reviewer></Reviewers>

// Queries a custom XML part for elements matching the search terms.
await Word.run(async (context) => {
  const settings: Word.SettingCollection = context.document.settings;
  const xmlPartIDSetting: Word.Setting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value");

  await context.sync();

  if (xmlPartIDSetting.value) {
    const customXmlPart: Word.CustomXmlPart = context.document.customXmlParts.getItem(xmlPartIDSetting.value);
    const xpathToQueryFor = "/Reviewers/Reviewer";
    const clientResult = customXmlPart.query(xpathToQueryFor, {
      contoso: "http://schemas.contoso.com/review/1.0"
    });

    await context.sync();

    console.log(`Queried custom XML part for ${xpathToQueryFor} and found ${clientResult.value.length} matches:`);
    for (let i = 0; i < clientResult.value.length; i++) {
      console.log(clientResult.value[i]);
    }
  } else {
    console.warn("Didn't find custom XML part to query.");
  }
});

setXml(xml)

设置自定义 XML 部件的完整 XML 内容。

setXml(xml: string): void;

参数

xml

string

必填。 要设置的 XML 内容。

返回

void

注解

[ API 集:WordApi 1.4 ]

示例

// Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml

// Original XML: <Reviewers xmlns='http://schemas.contoso.com/review/1.0'><Reviewer>Juan</Reviewer><Reviewer>Hong</Reviewer><Reviewer>Sally</Reviewer></Reviewers>

// Replaces a custom XML part.
await Word.run(async (context) => {
  const settings: Word.SettingCollection = context.document.settings;
  const xmlPartIDSetting: Word.Setting = settings.getItemOrNullObject("ContosoReviewXmlPartIdNS").load("value");
  await context.sync();

  if (xmlPartIDSetting.value) {
    const customXmlPart: Word.CustomXmlPart = context.document.customXmlParts.getItem(xmlPartIDSetting.value);
    const originalXmlBlob = customXmlPart.getXml();
    await context.sync();

    let readableXml = addLineBreaksToXML(originalXmlBlob.value);
    console.log("Original custom XML part:", readableXml);

    // The setXml method replaces the entire XML part.
    customXmlPart.setXml(
      "<Reviewers xmlns='http://schemas.contoso.com/review/1.0'><Reviewer>John</Reviewer><Reviewer>Hitomi</Reviewer></Reviewers>"
    );
    const updatedXmlBlob = customXmlPart.getXml();
    await context.sync();

    readableXml = addLineBreaksToXML(updatedXmlBlob.value);
    console.log("Replaced custom XML part:", readableXml);
  } else {
    console.warn("Didn't find custom XML part to replace.");
  }
});

toJSON()

重写 JavaScript toJSON() 方法,以便在将 API 对象传递给 JSON.stringify()时提供更有用的输出。 JSON.stringify (,反过来又调用toJSON传递给它的 对象的 方法。) 而原始Word.CustomXmlPart对象是 API 对象,toJSON该方法返回一个纯 JavaScript 对象, (类型为 Word.Interfaces.CustomXmlPartData) ,其中包含原始对象中任何已加载子属性的浅表副本。

toJSON(): Word.Interfaces.CustomXmlPartData;

返回

track()

根据文档中的相应更改来跟踪对象,以便进行自动调整。 此调用是 context.trackedObjects.add (thisObject) 的简写。 如果跨 .sync 调用和“.run”批处理的顺序执行外部使用此对象,并在设置属性或调用对象方法时收到“InvalidObjectPath”错误,则需要在首次创建对象时将该对象添加到跟踪的对象集合。 如果此对象是集合的一部分,则还应跟踪父集合。

track(): Word.CustomXmlPart;

返回

untrack()

释放与此对象关联的内存(如果先前已跟踪过)。 此调用是 context.trackedObjects.remove (thisObject) 的简写。 拥有许多跟踪对象会降低主机应用程序的速度,因此请在使用完毕后释放所添加的任何对象。 在内存发布生效之前,需要调用 context.sync()

untrack(): Word.CustomXmlPart;

返回

updateAttribute(xpath, namespaceMappings, name, value)

使用 xpath 标识的元素的给定名称更新特性的值。

updateAttribute(xpath: string, namespaceMappings: {
            [key: string]: string;
        }, name: string, value: string): void;

参数

xpath

string

必填。 XPath 表示法中单个元素的绝对路径。

namespaceMappings

{ [key: string]: string; }

必填。 一个 对象,其属性值是命名空间名称,其属性名称是相应命名空间的别名。 例如, {greg: "http://calendartypes.org/xsds/GregorianCalendar"}。 属性名称 ((如“greg”) )可以是不使用 XPath 保留字符的任何字符串,例如正斜杠“/”。

name

string

必填。 属性的名称。

value

string

必填。 特性的新值。

返回

void

注解

[ API 集:WordApi 1.4 ]

如果树中的任何元素具有 xmlns 属性 (其值通常为但并非始终为 URI) ,则该属性值的别名必须在 xpath 参数中的元素名称作为前缀。 例如,假设树如下所示:

<Day>
  <Month xmlns="http://calendartypes.org/xsds/GregorianCalendar">
    <Week>something</Week>
  </Month>
</Day>

<Week> xpath 必须为 /Day/greg:Month/Week,其中 greg 是映射到 namespaceMappings 参数中的“http://calendartypes.org/xsds/GregorianCalendar”的别名。

updateElement(xpath, xml, namespaceMappings)

更新 xpath 标识的元素的 XML。

updateElement(xpath: string, xml: string, namespaceMappings: {
            [key: string]: string;
        }): void;

参数

xpath

string

必填。 XPath 表示法中单个元素的绝对路径。

xml

string

必填。 要存储的新 XML 内容。

namespaceMappings

{ [key: string]: string; }

必填。 一个 对象,其属性值是命名空间名称,其属性名称是相应命名空间的别名。 例如, {greg: "http://calendartypes.org/xsds/GregorianCalendar"}。 属性名称 ((如“greg”) )可以是不使用 XPath 保留字符的任何字符串,例如正斜杠“/”。

返回

void

注解

[ API 集:WordApi 1.4 ]

如果树中的任何元素具有 xmlns 属性 (其值通常为但并非始终为 URI) ,则该属性值的别名必须在 xpath 参数中的元素名称作为前缀。 例如,假设树如下所示:

<Day>
  <Month xmlns="http://calendartypes.org/xsds/GregorianCalendar">
    <Week>something</Week>
  </Month>
</Day>

<Week> xpath 必须为 /Day/greg:Month/Week,其中 greg 是映射到 namespaceMappings 参数中的“http://calendartypes.org/xsds/GregorianCalendar”的别名。