如何在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 :(得分: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>
与身份模板相结合,以复制其他内容。