XSLT:在svg文件的根目录中插入节点

时间:2019-02-09 15:55:12

标签: xml xslt

我的目标是使用下面的XSLT将两个节点dataDS.select(col("count")).printSchema; root |-- count: integer (nullable = true) <style>添加到我的SVG文件中,但是我面临两个问题。首先,在添加<whatever>时,它包含了三个我不想要的<style>属性:

xmlns

然后,它不会添加我的第二个节点<style xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:svg="http://www.w3.org/2000/svg">.val{--valence: #4599a3}</style>

我该如何解决?

<whatever>

2 个答案:

答案 0 :(得分:1)

  1. 命名空间是继承的。要摆脱它们,您需要设置另一个名称空间或一个空名称空间(创建xmlns=""意味着没有名称空间/空名称空间)。删除

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:svg="http://www.w3.org/2000/svg"
    

    解决此问题的一种方法是使用xsl:element显式定义元素:

    <xsl:element name="whatever" namespace="">foo</xsl:element>
    

    现在,元素上只剩下xmlns=""。要同时删除此名称,请将名称空间设置为默认名称空间-此处可能是http://www.w3.org/2000/svg

    <xsl:element name="whatever" namespace="http://www.w3.org/2000/svg">foo</xsl:element>
    

    现在该元素显示为<whatever>foo</whatever>,但请记住,它实际上具有继承的默认名称空间。

  2.   

    然后,它不会添加我的第二个节点<whatever>

    之所以会这样,是因为您有两个模板具有相同的匹配规则match="svg:title"。使匹配规则唯一,它将起作用。

答案 1 :(得分:1)

如果要在SVG命名空间中添加元素,则需要使用它,因此,如果整个样式表都应创建SVG元素,并且已经在根元素上声明了它,就像使用

new

您可以使用<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:svg="http://www.w3.org/2000/svg" version='1.0'> 创建SVG style元素:

svg:style

或者,您可以在样式表的根元素上放置默认的名称空间声明 <xsl:template match="svg:title"> <xsl:copy-of select="."/> <svg:style>.val{--valence: #4599a3}</svg:style> </xsl:template> ,例如

xmlns="http://www.w3.org/2000/svg"

<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version='1.0'> .. <xsl:template match="svg:title"> <xsl:copy-of select="."/> <style>.val{--valence: #4599a3}</style> </xsl:template> 不需要。

对于您在XPath表达式或XSLT匹配模式的根元素上声明的其他名称空间声明,但又不想将其用于结果元素,可以在{{1}上使用xsl:element属性} / exclude-result-prefixes例如xsl:stylesheet

xsl:transform

https://xsltfiddle.liberty-development.net/gWvjQeY