我正在过滤掉我的XSLT转换中的某些节点,剩下的就是如果缺少某个子元素,我需要插入一个元素。
这就是我所拥有的。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" >
<xsl:output method="xml" indent="yes"/>
<xsl:template xpath-default-namespace="http://www.tempuri.org" match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template xpath-default-namespace="http://www.tempuri.org" match="SomeNode">
</xsl:template>
<xsl:template xpath-default-namespace="http://www.tempuri.org" match="TheNode[@type!='SomeType' and @type!='OtherType']">
<!-- If TheNode is missing a child element SomeElement, insert a blank SomeElement element -->
</xsl:template>
</xsl:stylesheet>
有人可以提出最好的解决方法吗?
感谢。
答案 0 :(得分:3)
此转化:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xpath-default-namespace="http://www.tempuri.org" >
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="SomeNode">
</xsl:template>
<xsl:template match=
"TheNode[not(@type = ('SomeType','OtherType')) and not(SomeElement)]">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<SomeElement xmlns="http://www.tempuri.org"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
应用于此XML文档:
<t xmlns="http://www.tempuri.org">
<a>
<b/>
<SomeNode/>
<TheNode type="x"/>
<TheNode type="y">
<SomeElement/>
</TheNode>
</a>
</t>
生成想要的正确结果:
<t xmlns="http://www.tempuri.org">
<a>
<b/>
<TheNode type="x">
<SomeElement/>
</TheNode>
<TheNode type="y">
<SomeElement/>
</TheNode>
</a>
</t>