输入XML:
<?xml version="1.0" encoding="UTF-8"?><svg height="3553.21" width="9358.09" viewBox="0 0 9358.09 3553.21" xmlns="http://www.w3.org/2000/svg">
<rect fill="#16202c" x="0" y="0" width="9358.09" height="3553.21"/>
<g transform="scale(0.7)>
<g id="0-0-0" class="classPolyline" type="twycenterline" nameObject="WW12" sizeMin="" sizeMax="">
<polyline fill="none" stroke="#292929" stroke-width="0.2" fill-opacity="1" points="218.36444444444453,127.61111111111109 "/>
</g>
<g id="1-0-0" class="classPolyline" type="twycenterline" nameObject="WW12" sizeMin="" sizeMax="">
<polyline fill="none" stroke="#292929" stroke-width="0.2" fill-opacity="1" points="462.22222222222223,127.14222222222219 "/>
</g>
<g id="2-0-0" class="classPolyline" type="twy" nameObject="WW12" sizeMin="" sizeMax="">
<polyline fill="none" stroke="#292929" stroke-width="0.2" fill-opacity="1" points="462.22222222222223,127.14222222222219 "/>
</g>
<g id="3-0-0" class="classPolyline" type="circle" nameObject="WW12" sizeMin="" sizeMax="">
<text class="classText" id="12200-0-0" type="lamp_label_only" fill="#ffffff">20L-AP2-065A</text>
</g>
<g id="4-0-0" class="classPolyline" type="circle" nameObject="WW12" sizeMin="" sizeMax="">
<text class="classText" id="12201-0-0" type="lamp_label_only" fill="#ffffff">WW8c-008B</text>
</g>
</g>
</svg>
预期产出:
<?xml version="1.0" encoding="UTF-8"?><svg height="3553.21" width="9358.09" viewBox="0 0 9358.09 3553.21" xmlns="http://www.w3.org/2000/svg">
<rect fill="#16202c" x="0" y="0" width="9358.09" height="3553.21"/>
<g transform="scale(0.7)>
<g type="twycenterline">
<g id="0-0-0" class="classPolyline" type="twycenterline" nameObject="WW12" sizeMin="" sizeMax="">
<polyline fill="none" stroke="#292929" stroke-width="0.2" fill-opacity="1" points="218.36444444444453,127.61111111111109 "/>
</g>
<g id="1-0-0" class="classPolyline" type="twycenterline" nameObject="WW12" sizeMin="" sizeMax="">
<polyline fill="none" stroke="#292929" stroke-width="0.2" fill-opacity="1" points="462.22222222222223,127.14222222222219 "/>
</g>
</g>
<g type="twy">
<g id="2-0-0" class="classPolyline" type="twy" nameObject="WW12" sizeMin="" sizeMax="">
<polyline fill="none" stroke="#292929" stroke-width="0.2" fill-opacity="1" points="462.22222222222223,127.14222222222219 "/>
</g>
</g>
<g type="circle">
<g id="3-0-0" class="classPolyline" type="circle" nameObject="WW12" sizeMin="" sizeMax="">
<text class="classText" id="12200-0-0" type="lamp_label_only" fill="#ffffff">20L-AP2-065A</text>
</g>
<g id="4-0-0" class="classPolyline" type="circle" nameObject="WW12" sizeMin="" sizeMax="">
<text class="classText" id="12201-0-0" type="lamp_label_only" fill="#ffffff">WW8c-008B</text>
</g>
</g>
</g>
</svg>
我已经处理过的我的XSLT文件。不确定这个
出了什么问题<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes" method="xml" />
<xsl:key name="type1" match="g" use="@type" />
<xsl:template match="/">
<svg xmlns="http://www.w3.org/2000/svg" >
<xsl:variable name="viewWidth"><xsl:value-of select=".//@width"/></xsl:variable>
<xsl:variable name="viewHeight"><xsl:value-of select=".//@height"/></xsl:variable>
<xsl:attribute name="height"><xsl:value-of select="$viewHeight" /></xsl:attribute>
<xsl:attribute name="width"><xsl:value-of select="$viewWidth" /></xsl:attribute>
<g>
<xsl:variable name="trans"><xsl:value-of select=".//@transform"/></xsl:variable>
<xsl:attribute name="transform"><xsl:value-of select="$trans" /></xsl:attribute>
<xsl:variable name="type"><xsl:value-of select=".//@type"/></xsl:variable>
<xsl:comment>trans <xsl:copy-of select="$trans" /></xsl:comment>
<xsl:comment>type <xsl:copy-of select="$type" /></xsl:comment>
<xsl:apply-templates select="g[generate-id(.)=generate-id(key('type1',@type)[1])]"/>
</g>
</svg>
</xsl:template>
<xsl:template match="g">
<xsl:comment>template <xsl:copy-of select="template" /></xsl:comment>
<g value="{@type}">
<xsl:comment>g1111 <xsl:copy-of select="g11111" /></xsl:comment>
<xsl:for-each select="key('type1', @type)">
<xsl:comment><xsl:copy-of select="@type" /></xsl:comment>
</xsl:for-each>
</g>
</xsl:template>
</xsl:stylesheet>
我已经阅读过很多关于此的博客但不是我无法创建群组。以下是详细信息。 输入需要转换为预期输出的XML。下面我分享了输入和输出XMl和我的XSLT文件。 请帮助....
答案 0 :(得分:1)
您的XSLT有两个问题
您的初始模板与文档节点“/”匹配。但是,当您执行<Route path="/compA" component={(props) => (<compA {...props} myProp={this.state.myProp} />) } />
时,选择“g”,它不是文档节点的子节点(“svg”是文档节点的子节点)。要解决此问题,您可以将模板匹配更改为“/ *”。
您尚未考虑XSLT中的命名空间。 XML中的所有元素都在“http://www.w3.org/2000/svg”命名空间中,但在XSLT中,您正在查找无命名空间中的元素。要解决这个问题,您需要在XSLT中声明命名空间(带前缀),然后在匹配任何元素时使用该前缀。
如果您在XSLT中使用身份模板,也可以帮助复制现有元素,因为这将有助于简化您的XSLT。
试试这个XSLT
xsl:apply-templates