2012-10-31 58 views
0

如何在XML文檔中的一組相同xml標記周圍插入結束標記和結束標記?舉例來說,如果我原來的XML如下所示:使用開始標記和結束標記封裝具有相同XML標記的組

<recordImport OperatorID="ABC123"> 
    <patients> 
     <patient roomNo=1 name="George Washington" addressID="1"> 
      <address ID="1" street="123 Credibility Street" city="Boston" state="MA"/> 
      <address ID="1" street="456 Aqualung Avenue" city="Seattle" state="WA"/> 
     </patient> 
     <patient roomNo=2 name="Thomas Jefferson" addressID="2"> 
      <address ID="2" street="5 Famous Street" city="Burbank" state="CA"/> 
     </patient> 
    </patients> 
</recordImport> 

我怎麼能插入「地址」標籤如下:

<recordImport OperatorID="ABC123"> 
    <patients> 
     <patient roomNo=1 name="George Washington" addressID="1"> 
      <addresses> 
       <address ID="1" street="123 Credibility Street" city="Boston" state="MA"/> 
       <address ID="1" street="456 Aqualung Avenue" city="Seattle" state="WA"/> 
      </addresses> 
     </patient> 
     <patient roomNo=2 name="Thomas Jefferson" addressID="2"> 
      <addresses> 
       <address ID="2" street="5 Famous Street" city="Burbank" state="CA"/> 
      </addresses>    
     </patient> 
    </patients> 
</recordImport> 

我寧願一個非LINQ解決方案,但我會用它如果它歸結於它。

在此先感謝。

+0

您正在使用哪種腳本語言? – Vinit

回答

0

在這個特定的例子中,你只需要包含一個<addresses>元素作爲每個<patient>的子元素,這很容易使用XSLT。據推測,一般情況更爲複雜。

隨着XSLT 2.0的一般解決方案是:

<xsl:template match="*[address]"> 
    <xsl:for-each-group select="*" group-adjacent="node-name()"> 
    <xsl:choose> 
     <xsl:when test="self::address"> 
     <addresses><xsl:copy-of select="current-group()"/></addresses> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:copy-of select="current-group()"/> 
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:for-each-group> 
</xsl:template> 

與身份模板組合以複製其他的東西不變。

相關問題