【发布时间】:2015-02-20 13:02:52
【问题描述】:
有那个 XML 节点
<svg>
<g transform="translate(113.63-359.13)">
<use fill="#f00" xlink:href="#D"/>
<g transform="translate(72.59-8.504)">
<use xlink:href="#E"/>
<path fill="#f00" stroke="#000" stroke-linejoin="round" stroke-linecap="round" stroke-width=".24" d="m6.04 526.26h19.843v4.961h-19.843z"/>
<use xlink:href="#F"/>
</g>
<text x="20.41" y="527.6" fill="#000" font-family="Arial" font-size="8">ProcessOutbound</text>
</g>
</svg>
可以通过这个 Xpath 找到
/svg/g[text="ProcessOutbound"]/use
这个工作也很好
/svg/g[text="ProcessOutbound"]/use/@fill
但由于某些原因,xsl 没有用 #00f 替换 #f00,这已经很累了
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:param name="blue" select="'#00f'"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match='/svg/g[text="ProcessOutbound"]/use'>
<xsl:attribute name='fill'>
<xsl:value-of select="'$blue'"/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
实际上整个 svg 文件被复制了,但填充属性没有被替换。我试图获得一个副本,但使用替换的填充值
xsl用常量值替换属性值的正确方法是什么?
所以预期的结果应该是这样的
<g transform="translate(113.63-359.13)">
<use fill="#00f" xlink:href="#D"/>
<g transform="translate(72.59-8.504)">
<use xlink:href="#E"/>
<path fill="#f00" stroke="#000" stroke-linejoin="round" stroke-linecap="round" stroke-width=".24" d="m6.04 526.26h19.843v4.961h-19.843z"/>
<use xlink:href="#F"/>
</g>
<text x="20.41" y="527.6" fill="#000" font-family="Arial" font-size="8">ProcessOutbound</text>
</g>
【问题讨论】:
-
您的 XML 无效。请尝试发布完整的 XML。而且,在您显示的 XML 片段中,我找不到
/svg/g[text="ProcessOutbound"]/use的匹配项 -
完整显示您所需的文本。
-
文件有点大,很难在这里发布完整的文件。完整的 xpath 将是 /svg/g[8]/use/@fill
-
我不是在询问整个 XML,对于您给定的输入,预期的结果可能是什么。
-
现在以这种方式编辑了帖子。这只是fill的值