2011-02-02 63 views
0

我正在使用xslt1.0。我要在节点之间采用模板宽:instrText和W:fldChar宽:fldCharType = “结束”/>和......请帮助我..在节点之间应用模板

<w:r w:rsidRPr="00ED1487"> 
    <w:rPr> 
     <w:i/> 
     <w:color w:val="E36C0A" w:themeColor="accent6" w:themeShade="BF"/> 
    </w:rPr> 
    <w:instrText xml:space="preserve" 
    > DATE \@ "dddd, MMMM dd, yyyy" \* MERGEFORMAT </w:instrText> 
</w:r> 
<w:r w:rsidRPr="00ED1487"> 
    <w:rPr> 
     <w:i/> 
     <w:color w:val="E36C0A" w:themeColor="accent6" w:themeShade="BF"/> 
    </w:rPr> 
    <w:fldChar w:fldCharType="separate"/> 
</w:r> 
<w:r w:rsidRPr="00ED1487"> 
    <w:rPr> 
     <w:i/> 
     <w:noProof/> 
     <w:color w:val="E36C0A" w:themeColor="accent6" w:themeShade="BF"/> 
    </w:rPr> 
    <w:t>Wednesday</w:t> 
</w:r> 
<w:r> 
    <w:rPr> 
     <w:noProof/> 
    </w:rPr> 
    <w:t>, February 02, 2011</w:t> 
</w:r> 
<w:r> 
    <w:fldChar w:fldCharType="end"/> 
</w:r> 
+0

您将需要提供比这更多的细节 - 您想要将上述XML转换为什么?你想在你已经突出显示的位置插入什么?你需要复制文件并添加额外的信息吗? – ColinE 2011-02-02 08:24:31

回答

1

这种转变

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:w="w:w"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:key name="kinBetween" match="w:r" 
    use="concat(generate-id(preceding-sibling::w:r[w:instrText][1]), 
       '+', 
       generate-id(following-sibling::w:r 
           [w:fldChar/@w:fldCharType='end']) 
      ) 
     "/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="/*"> 
    <t> 
    <xsl:apply-templates select= 
    "key('kinBetween', 
     concat(generate-id(w:r[w:instrText][1]), 
       '+', 
       generate-id(w:r[w:fldChar/@w:fldCharType='end'][1]) 
       ) 
     ) 
    "/> 
    </t> 
</xsl:template> 
</xsl:stylesheet> 

当在所提供的输入施加(校正为一个良好的XML文档):

<t xmlns:w="w:w"> 
    <w:r w:rsidRPr="00ED1487" > 
     <w:rPr> 
      <w:i/> 
      <w:color w:val="E36C0A" w:themeColor="accent6" w:themeShade="BF"/> 
     </w:rPr> 
     <w:instrText xml:space="preserve"> DATE \@ "dddd, MMMM dd, yyyy" \* MERGEFORMAT </w:instrText> 
    </w:r> 
    <w:r w:rsidRPr="00ED1487"> 
     <w:rPr> 
      <w:i/> 
      <w:color w:val="E36C0A" w:themeColor="accent6" w:themeShade="BF"/> 
     </w:rPr> 
     <w:fldChar w:fldCharType="separate"/> 
    </w:r> 
    <w:r w:rsidRPr="00ED1487"> 
     <w:rPr> 
      <w:i/> 
      <w:noProof/> 
      <w:color w:val="E36C0A" w:themeColor="accent6" w:themeShade="BF"/> 
     </w:rPr> 
     <w:t>Wednesday</w:t> 
    </w:r> 
    <w:r> 
     <w:rPr> 
      <w:noProof/> 
     </w:rPr> 
     <w:t>, February 02, 2011</w:t> 
    </w:r> 
    <w:r> 
     <w:fldChar w:fldCharType="end"/> 
    </w:r> 
</t> 

个过程(与如已经不需要特定的加工身份模板)所要求的时间间隔内完全节点,并产生想要的,正确的结果

<t xmlns:w="w:w"> 
    <w:r w:rsidRPr="00ED1487"> 
     <w:rPr> 
     <w:i/> 
     <w:color w:val="E36C0A" w:themeColor="accent6" w:themeShade="BF"/> 
     </w:rPr> 
     <w:fldChar w:fldCharType="separate"/> 
    </w:r> 
    <w:r w:rsidRPr="00ED1487"> 
     <w:rPr> 
     <w:i/> 
     <w:noProof/> 
     <w:color w:val="E36C0A" w:themeColor="accent6" w:themeShade="BF"/> 
     </w:rPr> 
     <w:t>Wednesday</w:t> 
    </w:r> 
    <w:r> 
     <w:rPr> 
     <w:noProof/> 
     </w:rPr> 
     <w:t>, February 02, 2011</w:t> 
    </w:r> 
</t> 

说明:命名kinBetween关键是定义和使用以确定两个w:r元素之间的所有w:r元素,并具有start-interval-element和end-interval-element所需的属性。