2014-10-26 86 views
3
<?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,如果城市是元帥和學校的名字是執法官,然後檢查這兩個部門的名稱化學與科學 - 化學存在, 如果屬實,取出化學系的元素。如果Science-Chemistry不存在,則使用 DeptCode將化學部門值修改爲4,並將部門名稱設置爲Science-Chemistry和Department屬性標識爲4.XSLT - 修改根據病情

以下是我正在使用的XSLT。我需要在remDept模板下編寫代碼,以刪除部門名稱科學化學存在的部門。 如果科學化學不存在,則修改模板modifyDept中的部門代碼和部門名稱爲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()[email protected]*"> 
    <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> 

回答

4

從上面的XML,如果城市是元帥和學校的名字是執法官, 然後檢查這兩個部門的名稱化學與科學 - 化學存在, 如果屬實,刪除部門元素化學。如果 科學,化學不存在,然後修改化學系 值與作爲DEPTCODE 4和部門名稱爲科學,化學和 系屬性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> 
+0

我是一個newbee編寫XSLT文件。我很難找到解決方案。我一直想了解層次結構如何工作,並且您的解決方案幫助我學習。非常感謝。 – 2014-10-27 02:43:29

+0

+1用於XSLT編碼。 – 2014-10-28 12:18:03