Xslt 在节点之间应用模板
我正在使用xslt1.0。我必须在节点w:instrText和w:fldChar w:fldCharType=“end”/>之间应用模板,并且…请帮助我Xslt 在节点之间应用模板,xslt,Xslt,我正在使用xslt1.0。我必须在节点w:instrText和w:fldChar w:fldCharType=“end”/>之间应用模板,并且…请帮助我 <w:r w:rsidRPr="00ED1487"> <w:rPr> <w:i/> <w:color w:val="E36C0A" w:themeColor="accent6" w:themeShade="BF"/> </w:rPr>
<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>
日期\@“dddd,MMMM dd,yyyy”\*合并格式
星期三
,2011年2月2日
此转换:
<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>
<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>
应用于提供的输入时(更正为格式良好的XML文档):
日期\@“dddd,MMMM dd,yyyy”\*合并格式
星期三
,2011年2月2日
在要求的时间间隔内准确地处理(由于不需要特定处理,所以使用标识模板)节点,并生成所需的正确结果:
<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>
<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>
星期三
,2011年2月2日
解释:定义并使用名为
kinBetween
的键来标识两个w:r
元素之间的所有w:r
元素,这些元素具有开始间隔元素和结束间隔元素所需的属性。您需要提供比此更详细的信息-您想转换什么上面的XML是什么?要在突出显示的位置插入什么?您需要复制文档并添加额外信息吗?感谢您的指导。我想将此xml转换为html,为此我需要一个xslt模板。好问题,+1。请参阅我的答案,了解使用
的完整解决方案:)@迪米特:事实上,这不是一个好问题……;)@迪米特雷-有点像给予中国最惠国贸易地位,或给予奥巴马总统诺贝尔和平奖?