我想通過使用字段w:fldLock
設置鎖來防止更新word文檔字段。我有一個xml
文件,其中包含節點w:fldSimple
。每當我找到這個節點時,我想將屬性w:fldLock
設置爲這個節點。爲了實現這一點,我想使用XSLT轉換。您能否告訴我樣本XSL轉換?將新的xml屬性插入MS Word xml文檔元素
示例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>
請告訴我這個?
我試過了。你能簡單地解釋一下上面的代碼嗎? – user3181200
[identity transform](http://en.wikipedia.org/wiki/Identity_transform)是一種常用模式,用於遞歸複製xml文件逐個片段。我通過尋找'w:fldSimple'來'偷偷'找到你需要的屬性,從而入侵*身份*。更常見的情況是,您應該保持身份轉換爲「純」,然後明確讓其他模板訂閱變化 - 例如根據我的[先前的編輯](http://stackoverflow.com/posts/21041939/revisions)。然而,由於這看起來是一次性的屬性轉換,所以爲了簡潔起見,我將它改爲*身份*。 – StuartLC
我遵循我現有的一個xslt代碼來實現此行爲。但它給出了一個錯誤,指出「XML文檔必須具有頂級元素」。 請找到下面的代碼: – user3181200