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>、すべてのの子として要素を含めるだけで済み<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>

IDテンプレートと組み合わせて、他のものを変更せずにコピーします。

于 2012-10-31T19:33:34.113 に答える