使用XSLT向标记添加属性

时间:2012-03-03 17:20:23

标签: xslt

我有一些带有1-n Path元素的svg文档,现在我想更改这些路径元素的颜色。

我还没有找到办法做到这一点

Svg示例文档:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="45" width="45" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
<g transform="matrix(1.25,0,0,-1.25,0,45)">
<path d="m9 18h18v-3h-18v3"/>
</g>
</svg>

XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' version='1.0'>
<xsl:template match='path'>
<xsl:copy>
<xsl:attribute name='fill'>red</xsl:attribute>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

我需要更改什么才能将fill属性添加/更改为红色?

1 个答案:

答案 0 :(得分:4)

我认为您误解了XSLT的工作原理。它需要一个输入XML树,并通过解释样式表生成 new 树。换句话说,样式表定义了如何根据输入XML树从头开始生成全新的树。

了解您没有修改原始XML树非常重要。这就像纯粹的功能性语言和命令式语言之间的区别。结论:您无法将fill属性更改 red,您可以生成原始文档的副本,其中fill属性设置为{ {1}}。

那就是说,你或多或少会这样做:

red