我有以下内容:
...
<ContentsNodes>
<Node id="14003"/>
<Node id="13944"/>
<Node id="292"/>
<Node id="8418">
<ChildNodes>
<Node id="8420"/>
<Node id="8421"/>
<Node id="47316">
<ChildNodes>
<Node id="8423"/>
<Node id="8424"/>
<Node id="8425"/>
<Node id="8426"/>
<Node id="8427"/>
<Node id="15682"/>
</ChildNodes>
</Node>
<Node id="55240">
<ChildNodes>
<Node id="8429"/>
<Node id="8430"/>
</ChildNodes>
</Node>
<Node id="8431"/>
<Node id="55241">
<ChildNodes>
<Node id="8433"/>
<Node id="8434"/>
<Node id="8435"/>
<Node id="8436"/>
<Node id="8439"/>
<Node id="8440"/>
<Node id="8441"/>
<Node id="8438"/>
</ChildNodes>
</Node>
<Node id="12977"/>
<Node id="2340"/>
</ChildNodes>
</Node>
</ContentsNodes>
...
我想:
<Node id="47316">
<Node id="55240">
<Node id="8421"/>
处于同一级别。换句话说:
<ContentsNodes>
<Node id="14003"/>
<Node id="13944"/>
<Node id="292"/>
<Node id="8418">
<ChildNodes>
<Node id="8420"/>
<Node id="8421"/>
<Node id="8423"/>
<Node id="8424"/>
<Node id="8425"/>
<Node id="8426"/>
<Node id="8427"/>
<Node id="15682"/>
<Node id="8429"/>
<Node id="8430"/>
<Node id="8431"/>
<Node id="55241">
<ChildNodes>
<Node id="8433"/>
<Node id="8434"/>
<Node id="8435"/>
<Node id="8436"/>
<Node id="8439"/>
<Node id="8440"/>
<Node id="8441"/>
<Node id="8438"/>
</ChildNodes>
</Node>
<Node id="12977"/>
<Node id="2340"/>
</ChildNodes>
</Node>
</ContentsNodes>
我能够删除多余的节点:
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//path/to/Node[3]">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="//path/to/Node[4]">
<xsl:apply-templates/>
</xsl:template>
但我最终得到了:
<ContentsNodes>
<Node id="14003"></Node>
<Node id="13944"></Node>
<Node id="292"></Node>
<Node id="8418">
<ChildNodes>
<Node id="8420"></Node>
<Node id="8421"></Node>
<ChildNodes>
<Node id="8423"></Node>
<Node id="8424"></Node>
<Node id="8425"></Node>
<Node id="8426"></Node>
<Node id="8427"></Node>
<Node id="15682"></Node>
</ChildNodes>
<ChildNodes>
<Node id="8429"></Node>
<Node id="8430"></Node>
</ChildNodes>
<Node id="8431"></Node>
<Node id="55241">
<ChildNodes>
<Node id="8433"></Node>
<Node id="8434"></Node>
<Node id="8435"></Node>
<Node id="8436"></Node>
<Node id="8439"></Node>
<Node id="8440"></Node>
<Node id="8441"></Node>
<Node id="8438"></Node>
</ChildNodes>
</Node>
<Node id="12977"></Node>
<Node id="2340"></Node>
</ChildNodes>
</Node>
</ContentsNodes>
所以我仍然需要删除<ChildNodes>
下的<Node id="8421"></Node>
。如何通过一次转换实现这一目标?
答案 0 :(得分:1)
一种方法是简单地将当前xsl:apply-templates
替换为选择孙子节点的更具针对性的<xsl:apply-templates select="*/Node"/>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Node[@id = '47316' or @id = '55240']">
<xsl:apply-templates select="*/Node"/>
</xsl:template>
</xsl:stylesheet>
例如,试试这个XSLT
ChildNode
或者,添加一个模板,该模板也会忽略您要忽略的节点的<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Node[@id = '47316' or @id = '55240']">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="Node[@id = '47316' or @id = '55240']/*">
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
元素
// change non-opaque pixels to white
var imgData=ctx.getImageData(0,0,canvas.width,canvas.height);
var data=imgData.data;
for(var i=0;i<data.length;i+=4){
if(data[i+3]<255){
data[i] = 255 - data[i];
data[i+1] = 255 - data[i+1];
data[i+2] = 255 - data[i+2];
data[i+3] = 255 - data[i+3];
}