<?xml version="1.0" encoding="UTF-8"?>
<schools>
<city>Marshall</city>
<state>Maryland</state>
<highschool>
<schoolname>Marshalls</schoolname>
<department id="1">
<deptCode>D1</deptCode>
<deptName>Chemistry</deptName>
<deptHead>Henry Carl</deptHead>
</department>
<department id="2">
<deptCode>D2</deptCode>
<deptName>Science-Physics</deptName>
<deptHead>Martin Sean</deptHead>
</department>
<department id="3">
<deptCode>D3</deptCode>
<deptName>Science-Botany</deptName>
<deptHead>Susanne Charles</deptHead>
</department>
<department id="4">
<deptCode>D4</deptCode>
<deptName>Science-Chemistry</deptName>
<deptHead>Henry Carl</deptHead>
</department>
<highschool>
<schools>
从上面的xml中,如果城市是元帅,学校名称是Marshalls,那么检查是否存在化学和科学化学这两个部门的名称, 如果为true,则删除Chemistry的department元素。如果不存在Science-Chemistry,则修改化学部门的值 DeptCode为4,Dept Name为Science-Chemistry,Department属性id为4。
以下是我正在使用的XSLT。我需要在remDept模板下编写代码来删除Dept,如果dept名称是Science Chemistry存在的话。 如果Science Chemistry不存在,则将模板中的Dept Code和Dept Name修改为D4。有人能帮我吗?提前致谢
<?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" />
<xsl:strip-space elements="*" />
<xsl:template match="node()!@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
<xsl:copy>
</xsl:template>
<xsl:template match="/schools[city='Marshall' and /highschools/schoolname='Marshalls']">
<xsl:if test="contains(deptName='Science-Chemistry')">
<xsl:choose>
<xsl:when test="contains(deptName='Chemistry'">
<xsl:call-template name="remDept">
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="modifyDept">
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
<xsl:template name="remDept">
// TO DO
</xsl:template>
<xsl:template name="modifyDept">
// TO DO
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:4)
从上面的xml中,如果城市是元帅,学校名称是Marshalls, 然后检查化学和科学化学是否存在, 如果为true,则删除Chemistry的department元素。如果 科学化学不存在,然后修改化学系 DeptCode为4,Dept Name为Science-Chemistry和 部门属性ID为4。
也许我错过了一些东西,但在我看来,这可以通过以下方式完成(相对):
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="department[../../city='Marshall' and ../schoolname='Marshalls' and deptName='Chemistry']">
<xsl:if test="not(../department[deptName='Science-Chemistry'])">
<department id="4">
<deptCode>D4</deptCode>
<deptName>Science-Chemistry</deptName>
<xsl:copy-of select="deptHead"/>
</department>
</xsl:if>
</xsl:template>
</xsl:stylesheet>