将新的xml属性插入MS Word xml文档元素

用户名

我想通过使用field设置锁定来防止Word文档字段更新w:fldLock我有一个xml包含该节点文件w:fldSimple每当我找到该节点时,我都想将属性w:fldLock设置为此节点。为此,我想使用XSLT转换。您能告诉我样本XSL转换吗?

示例xml数据:

<?xml version="1.0" encoding="utf-8" ?>
<w:hdr mc:Ignorable="w14 wp14" xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape">
   <w:p w:rsidR="00235C27" w:rsidRDefault="00235C27">
      <w:pPr>
         <w:pStyle w:val="Header" />
      </w:pPr>
      <w:fldSimple w:instr="MERGEFIELD firstname \* MERGEFORMAT">
         <w:r>
            <w:rPr>
               <w:noProof />
            </w:rPr>
            <w:t>John</w:t>
         </w:r>
      </w:fldSimple>
   </w:p>
</w:hdr>

XSLT之后,我的输出应为如下所示的xml文件:

<?xml version="1.0" encoding="utf-8" ?>
<w:hdr mc:Ignorable="w14 wp14" xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape">
   <w:p w:rsidR="00235C27" w:rsidRDefault="00235C27">
      <w:pPr>
         <w:pStyle w:val="Header" />
      </w:pPr>
      <w:fldSimple w:instr="MERGEFIELD firstname \* MERGEFORMAT" w:fldLock = "1">
         <w:r>
            <w:rPr>
               <w:noProof />
            </w:rPr>
            <w:t>John</w:t>
         </w:r>
      </w:fldSimple>
   </w:p>
</w:hdr>

请给我建议吗?

斯图尔特

以下应该可以解决问题。它使用标识转换复制所有元素,然后处理w:fldSimple

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet 
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:xs="http://www.w3.org/2001/XMLSchema"
      xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
      version="1.0">

   <xsl:output method="xml" indent="yes"/>

   <!-- Modify the identity transform to slip in the extra attribute -->
   <xsl:template match="@* | node()">
      <xsl:copy>
         <xsl:if test="name()='w:fldSimple'">
            <xsl:attribute name="w:fldLock">1</xsl:attribute>
         </xsl:if>
         <xsl:apply-templates select="@* | node()"/>
      </xsl:copy>
   </xsl:template>

</xsl:stylesheet>

(首先添加属性,但这无关紧要)

  <w:fldSimple w:fldLock="1" w:instr="MERGEFIELD firstname \* MERGEFORMAT">

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Word文档的XML / XSD验证

来自分类Dev

使用XML直接签名Office Word文档

来自分类Dev

通过XML读取Word文档的内容

来自分类Dev

将PDF插入Word文档

来自分类Dev

XML 文档中的特定元素

来自分类Dev

将Word文档转换为xml代码C#

来自分类Dev

如何将 XML Word 文档转换为 DOCX?

来自分类Dev

如何使用XQuery将元素插入当前的XML文档中?

来自分类Dev

将元素插入从现有内容派生的XML文档中

来自分类Dev

Java将元素追加到XML文档

来自分类Dev

在Word文档中找不到段落和表格(开放XML)

来自分类Dev

如何处理损坏的XML Microsoft Office Word文档

来自分类Dev

将Java / xml代码从Notepad ++复制到MS Word

来自分类Dev

将List <string>插入Word文档

来自分类Dev

将word文档插入SQL Server

来自分类Dev

将外壳输出写入MS Word文档

来自分类Dev

Delphi xe10.2 打开新的ms word文档并插入表格

来自分类Dev

如何从xml文档返回所有元素?

来自分类Dev

递归排序任意XML文档的元素

来自分类Dev

为什么我的xml文档被视为元素?

来自分类Dev

处理xml文档中的缺失元素

来自分类Dev

检索XML文档中的HTML元素

来自分类Dev

XML - 文档不能包含多个根元素

来自分类Dev

计算 PHP 中多个文档的 XML 元素

来自分类Dev

获取 XML 文档中元素的数量

来自分类Dev

向 XML 文档添加多个元素

来自分类Dev

从 XML 文档中提取子元素 w

来自分类Dev

生成xml文档时如何插入元素计数

来自分类Dev

在Word文档中插入图片