XSLT:我可以使用xslt更新xml节点中的值吗?
发布时间:2020-12-16 05:35:38 所属栏目:百科 来源:网络整理
导读:例如,我有一个像xml一样的 books book id="1" title id="11" name="Basic XML"/ price id="12" amount="500"/ quantity id="13" number="10"/ /book /books 可以将“Basic XML”一书的名称更新为“Basic XSLT”,还是使用XSLT更改任何节点的任何其他属性?如
例如,我有一个像xml一样的
<books> <book id="1"> <title id="11" name="Basic XML"/> <price id="12" amount="500"/> <quantity id="13" number="10"/> </book> </books> 可以将“Basic XML”一书的名称更新为“Basic XSLT”,还是使用XSLT更改任何节点的任何其他属性?如果是的话,有人能给我一些如何做的例子吗? 提前致谢.
这种转变:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="my:my"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <my:reps> <repAttr name="name" value="Basic XSLT"/> <repAttr name="amount" value="300"/> <repAttr name="number" value="20"/> </my:reps> <xsl:strip-space elements="*"/> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <xsl:template match= "@*[name()=document('')/*/my:reps/*/@name]"> <xsl:attribute name="{name()}"> <xsl:value-of select= "document('')/*/my:reps/*[@name=name(current())]/@value"/> </xsl:attribute> </xsl:template> </xsl:stylesheet> 当应用于提供的XML文档时: <books> <book id="1"> <title id="11" name="Basic XML"/> <price id="12" amount="500"/> <quantity id="13" number="10"/> </book> </books> 产生想要的,正确的结果: <books> <book id="1"> <title id="11" name="Basic XSLT"/> <price id="12" amount="300"/> <quantity id="13" number="20"/> </book> </books> 说明: >标识规则/模板“按原样”复制每个节点.>标识模板由匹配任何属性的单个模板覆盖,该模板的名称可以作为my:reps元素(嵌入在XSLT样式表中的参数)中指定的repAttr元素的名称属性之一的值找到.>在这种情况下,将使用相应的repAttr元素(其value属性)中指定的相同名称和新值重新创建(不复制)该属性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |