0

如何在 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 解决方案,但如果归根结底,我会使用它。

提前致谢。

4

1 回答 1

0

在这个特定的示例中,您只需包含一个<addresses>元素作为 every 的子元素<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>

结合身份模板复制其他内容不变。

于 2012-10-31T19:33:34.113 回答