xsl:value-of xsl:for-each

本文介绍了XSLT中的两个基本指令xsl:value-of和xsl:for-each的使用方法,前者用于输出XML文档中指定元素的文本值,后者则用于循环处理所选节点集合。

xsl:value-of
 
XSL:value-of用来将源文档中元素的文本值写到输出文档中。例如:

有一个个人资料的XML文档:
 
<?xml version="1.0" encoding="iso-8859-1"?>

<PERSON>

<name>ajie</name>

<age>28</age>

</PERSON>
 
我如果想在输出文档中显示上面这个XML源文档中的name元素的值,可以这样写XSLT代码:
 
<xsl:template match="PERSON">

<xsl:value-of select="name"/>

</xsl:template>
 
执行后,你会看到"ajie"被单独显示出来。其中match="PERSON"定义摸板匹配PERSON节点,xsl:value-of
语法说明需要输出一个节点的值,而select="name"则定义需要被输出的元素为name。看这个过程是不是和数据库里查询一个人的名字很象?当然,xsl:value-of查询还有更多,更复杂的语法,因为是涉及寻找和定位的功能,我们会放在后面的XPath语法中在仔细讲解。

同样功能的还有xsl:copy-of,用法一样,就不重复解释

 

 

xsl:for-each
 
xsl:for-each语法允许你循环处理被选择的节点。例如:有一个含多个个人资料的XML文档:
 
<?xml version="1.0" encoding="iso-8859-1"?>

<PEOPLE>

<PERSON>

<name>ajie</name>

<age>28</age>

</PERSON>

<PERSON>

<name>tom</name>

<age>24</age>

</PERSON>

<PERSON>

<name>miake</name>

<age>30</age>

</PERSON>

</PEOPLE>
 
我需要显示所有人的姓名,则可以将XSLT代码写成:
 
<xsl:template match="PEOPLE">

<xsl:for-each select="child::PERSON">

<xsl:value-of select="name"/>

</ xsl:for-each>

</xsl:template>

<xsl:template match="w:tbl"> <xsl:variable name="colCount" select="count(w:tblGrid/w:gridCol)"/> <fo:table table-layout="fixed" width="100%" border-collapse="collapse"> <xsl:for-each select="w:tblGrid/w:gridCol"> <fo:table-column column-width="{@w:w div 20}pt"/> </xsl:for-each> <fo:table-body> <xsl:if test="count(w:tr[1]/w:tc) > $colCount"> <fo:table-row> <fo:table-cell number-columns-spanned="{$colCount}"> <fo:block color="red">表格列数溢出警告</fo:block> </fo:table-cell> </fo:table-row> </xsl:if> <xsl:apply-templates select="w:tr"/> </fo:table-body> </fo:table> </xsl:template> <xsl:template match="w:tr"> <fo:table-row> <xsl:apply-templates select="w:tc"/> </fo:table-row> </xsl:template> <xsl:template match="w:tc"> <fo:table-cell border="1pt solid black" padding="2pt" display-align="center"> <xsl:variable name="currentGridSpan" select="w:tcPr/w:gridSpan/@w:val"/> <xsl:if test="$currentGridSpan"> <xsl:attribute name="number-columns-spanned"> <xsl:value-of select="$currentGridSpan"/> </xsl:attribute> </xsl:if> <xsl:variable name="precedingSpanSum"> <xsl:choose> <xsl:when test="preceding-sibling::w:tc"> <xsl:value-of select="sum(preceding-sibling::w:tc/w:tcPr/w:gridSpan/@w:val) + count(preceding-sibling::w:tc[not(w:tcPr/w:gridSpan)])"/> </xsl:when> <xsl:otherwise>0</xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:if test="w:tcPr/w:vMerge[@w:val='restart']"> <xsl:variable name="currentRow" select="ancestor::w:tr"/> <xsl:variable name="currentPos" select="$precedingSpanSum + 1"/> <xsl:variable name="rowSpan"> <xsl:call-template name="calculateRowSpan"> <xsl:with-param name="remainingRows" select="$currentRow/following-sibling::w:tr"/> <xsl:with-param name="targetColumn" select="$currentPos"/> <xsl:with-param name="accumulator" select="1"/> </xsl:call-template> </xsl:variable> <xsl:attribute name="number-rows-spanned"> <xsl:value-of select="$rowSpan"/> </xsl:attribute> </xsl:if> <fo:block linefeed-treatment="ignore" white-space-collapse="true"> <xsl:apply-templates select=".//w:p"/> </fo:block> </fo:table-cell> </xsl:template> <xsl:template name="calculateRowSpan"> <xsl:param name="remainingRows"/> <xsl:param name="targetColumn"/> <xsl:param name="accumulator"/> <xsl:choose> <xsl:when test="$remainingRows[1]/w:tc[$targetColumn]/w:tcPr/w:vMerge[@w:val='continue']"> <xsl:call-template name="calculateRowSpan"> <xsl:with-param name="remainingRows" select="$remainingRows[position() > 1]"/> <xsl:with-param name="targetColumn" select="$targetColumn"/> <xsl:with-param name="accumulator" select="$accumulator + 1"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$accumulator"/> </xsl:otherwise> </xsl:choose> </xsl:template> 上述xlst样式表使用后报错The column-number or number of cells in the row overflows the number of fo:table-columns specified for the table. (See position 1:10790),怎么修改,请直接给出修改好的样式表,注意这是word的xml转xls-fo的xlst样式表,且版本均为1.0,请直接给出修改结果
03-08
<?xml version=“1.0”encoding=“UTF-8”?><xsl:stylesheet version=“3.0”xmlns:xsl=“http:xmlns:fo=“http:xmlns:w=“http:exclude-result-prefixes=“w”><!–增强字体映射–><xsl:variable name=“font-mapping”><font w:name=“宋体"fo:name=“SimSun”/><font w:name=“黑体"fo:name=“SimHei”/><font w:name=“等线"fo:name=“DengXian”/></xsl:variable><!–根模板–><xsl:template match=”/”>fo:rootfo:layout-master-set<fo:simple-page-master master-name=“A4"margin=“1in”><fo:region-body margin-top=“0.5in"margin-bottom=“0.5in”/><fo:region-before extent=“0.5in”/><fo:region-after extent=“0.5in”/></fo:simple-page-master></fo:layout-master-set><fo:page-sequence master-reference=“A4”><fo:flow flow-name=“xsl-region-body”><xsl:apply-templates select=”//w:body/*”/></fo:flow></fo:page-sequence></fo:root></xsl:template><!–增强段落处理–><xsl:template match=“w:p”><fo:block xsl:use-attribute-sets=“paragraph-style”><xsl:apply-templates select=“w:pPr/w:jc"mode=“align”/><xsl:apply-templates select=“w:pPr/w:ind”/><xsl:apply-templates select=”.//w:r”/></fo:block></xsl:template><!–文本格式处理增强–><xsl:template match=“w:r”>fo:inline<xsl:apply-templates select=“w:rPr”/><xsl:value-of select=“string-join(w:t, ‘’)”/></fo:inline></xsl:template><!–增强字体处理–><xsl:template match=“w:rPr”><xsl:variable name=“w-font"select=“w:rFonts/@w:ascii | w:rFonts/@w:hAnsi”/><xsl:attribute name=“font-family”><xsl:value-of select=”($font-mapping/font[@w:name = $w-font]/@fo:name, $w-font, ‘SimSun’)[1]“/></xsl:attribute><xsl:if test=“w:sz/@w:val”><xsl:attribute name=“font-size"select=“w:sz/@w:val * 0.5 || ‘pt’”/></xsl:if><xsl:if test=“w:color/@w:val != ‘auto’”><xsl:attribute name=“color"select=”‘#’ || w:color/@w:val”/></xsl:if><xsl:apply-templates select=“w:b | w:i | w:u | w:strike”/></xsl:template><!–下划线和删除线处理–><xsl:template match=“w:u”><xsl:attribute name=“text-decoration”>underline</xsl:attribute></xsl:template><xsl:template match=“w:strike”><xsl:attribute name=“text-decoration”>line-through</xsl:attribute></xsl:template><!–表格处理增强–><xsl:template match=“w:tbl”><fo:table table-layout=“fixed"width=“100%”><xsl:for-each select=“w:tblGrid/w:gridCol”><fo:table-column column-width=”{@w:w div 20}pt”/></xsl:for-each>fo:table-body<xsl:apply-templates select=“w:tr”/></fo:table-body></fo:table></xsl:template><xsl:template match=“w:tr”>fo:table-row<xsl:apply-templates select=“w:tc”/></fo:table-row></xsl:template><xsl:template match=“w:tc”><fo:table-cell border=“1pt solid #000"padding=“4pt”>fo:block<xsl:apply-templates select=”.//w:p"/></fo:block></fo:table-cell></xsl:template><!–段落对齐处理–><xsl:template match=“w:jc"mode=“align”><xsl:attribute name=“text-align”>xsl:choose<xsl:when test=”@w:val = ‘center’“>center</xsl:when><xsl:when test=”@w:val = ‘right’“>end</xsl:when><xsl:when test=”@w:val = ‘both’“>justify</xsl:when>xsl:otherwisestart</xsl:otherwise></xsl:choose></xsl:attribute></xsl:template><!–段落缩进处理–><xsl:template match=“w:ind”><xsl:attribute name=“text-indent”><xsl:value-of select=”@w:firstLine div 20 || ‘pt’"/></xsl:attribute></xsl:template><!–增强段落样式–><xsl:attribute-set name=“paragraph-style”><xsl:attribute name=“space-after”>12pt</xsl:attribute><xsl:attribute name=“line-height”>1.5</xsl:attribute><xsl:attribute name=“text-align”>left</xsl:attribute></xsl:attribute-set></xsl:stylesheet>这个不对,xsl:attribute没有select属性,请给出完整的修改好的结果
03-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值