2012-08-02 20 views
4

我需要改變通過XSL文件下面一個XML節點的特定元素的值來修改xml文件是我的XML數據如何使用XSLT

<hospitals> 
    <hospital> 
    <department> 
     <clinic> 
     <cid>8</cid> 
     <clinicName>clinic8</clinicName> 
     <status>1</status> 
     </clinic> 
     <clinic> 
     <cid>9</cid> 
     <clinicName>clinic9</clinicName> 
     <status>0</status> 
     </clinic> 
     <depId>3</depId> 
     <departmentName>dental</departmentName> 
    </department> 
    <hospId>2</hospId> 
    <hospitalName>appolo</hospitalName> 
    </hospital> 
    <hospital> 
    <department> 
     <clinic> 
     <cid>82</cid> 
     <clinicName>clinic82</clinicName> 
     <status>0</status> 
     </clinic> 
     <clinic> 
     <cid>92</cid> 
     <clinicName>clinic92</clinicName> 
     <status>0</status> 
     </clinic> 
     <depId>4</depId> 
     <departmentName>mental</departmentName> 
    </department> 
    <hospId>2</hospId> 
    <hospitalName>manipal</hospitalName> 
    </hospital> 
</hospitals> 

例如,我需要根據選擇clinic9其ID IE 9,改變狀態0到1

我試過這樣

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:param name="hospId"/> 
<xsl:param name="depId" /> 
<xsl:param name="clinicId"/> 
<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="hospitals/hospital[hospId='2']/department[depId='3']/clinic[cid='9']"> 
<xsl:choose> 
<xsl:when test="cid ='9'"> 
    <xsl:element name="status">123</xsl:element> 
    </xsl:when> 
</xsl:choose> 
</xsl:template> 
    </xsl:stylesheet> 

但價值並沒有改變......

回答

2

如果您嘗試修改/替換特定元素,則需要匹配該元素。例如,如果您試圖替換特定的status元素,則需要匹配該特定元素。

修改XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes" indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:param name="hospId" select="'2'"/> 
    <xsl:param name="depId" select="'3'"/> 
    <xsl:param name="clinicId" select="'9'"/> 

    <xsl:template match="node()|@*"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="hospitals/hospital[hospId='2']/department[depId='3']/clinic[cid='9']/status"> 
     <status>123</status> 
    </xsl:template> 
</xsl:stylesheet> 

XML輸出

<hospitals> 
    <hospital> 
     <department> 
     <clinic> 
      <cid>8</cid> 
      <clinicName>clinic8</clinicName> 
      <status>1</status> 
     </clinic> 
     <clinic> 
      <cid>9</cid> 
      <clinicName>clinic9</clinicName> 
      <status>123</status> 
     </clinic> 
     <depId>3</depId> 
     <departmentName>dental</departmentName> 
     </department> 
     <hospId>2</hospId> 
     <hospitalName>appolo</hospitalName> 
    </hospital> 
    <hospital> 
     <department> 
     <clinic> 
      <cid>82</cid> 
      <clinicName>clinic82</clinicName> 
      <status>0</status> 
     </clinic> 
     <clinic> 
      <cid>92</cid> 
      <clinicName>clinic92</clinicName> 
      <status>0</status> 
     </clinic> 
     <depId>4</depId> 
     <departmentName>mental</departmentName> 
     </department> 
     <hospId>2</hospId> 
     <hospitalName>manipal</hospitalName> 
    </hospital> 
</hospitals> 
+0

XML數據沒有得到更換下一 – subbusaabu 2012-08-02 09:17:55

+0

做我想做的,我需要令狀在XML文件中的一些代碼,以刷新或HTML任何額外的代碼需要 – subbusaabu 2012-08-02 09:38:38

+0

一兩件事,如果狀態值爲「 0',那麼我們需要設置狀態值爲'1',反之亦然 – subbusaabu 2012-08-02 10:18:56

0

聽起來好像您正嘗試使用XSLT更改原始XML文件。 XSLT無法更改原始文件。您可以使用它來轉換XML並通過使用運行XSLT的程序或腳本將其輸出到另一個XML。

+0

所以我需要什麼,當我需要修改特定的元素中的一個節點在XML – subbusaabu 2012-08-02 06:56:55

+0

您可以將使用。用XSLT輸出手動替換XML文件,b。使用XForms(一種用於構建能夠更改XML文件的編輯表單的技術)或c。使用一種語言,它能夠觸發XSLT轉換,得到的結果並保存爲一個文件(如PHP,看到這樣的回答:http://stackoverflow.com/questions/4946833/xml-outputting-php-vs-js- VS-什麼,否則/ 4948312#4948312) – Andreas 2012-08-02 07:27:16