簡體   English   中英

如何修改包含特定子節點值的XML節點?

[英]How to modify XML node that contains a specific child node value?

我有一個帶有XML列的表。 如何在包含具有特定值的子節點的節點內添加另一個節點? 例如,我想將foo/bar/e/f節點從barId 6699復制到barId66989。我僅找到一些示例,其中需要根據屬性值選擇節點。 我需要按子節點值過濾。

<foo>
    <bar>
        <barId>66988</barId>
        <name>baz 3</name>
    </bar>
    <bar>
        <barId>66989</barId>
        <name>b </name>
        <e>
            <g>
                <h>
                    <l>-</l>
                    <m>k</m>
                </h>
                <h>
                    <l>p  v</l>
                    <m>k</m>
                </h>
            </g>
        </e>
    </bar>
    <bar>
        <barId>6699</barId>
        <name>n 4 c</name>
        <e>
            <f>
                <h>
                    <i>k</i>
                    <j>9.3</j>
                </h>
            </f>
        </e>
    </bar>
</foo>

嘗試這個:

DECLARE @value XML = '<foo><bar><barId>66988</barId><name>baz 3</name></bar><bar><barId>66989</barId><name>b </name><e><g><h><l>-</l><m>k</m></h><h><l>p  v</l><m>k</m></h></g></e></bar><bar><barId>6699</barId><name>n 4 c</name><e><f><h><i>k</i><j>9.3</j></h></f></e></bar></foo>';

DECLARE @SourceID INT = 6699;
DECLARE @DestinationID INT = 66989;

DECLARE @temp XML;

SELECT @temp = T.c.query('.')
FROM @value.nodes('/foo/bar[barId = sql:variable("@SourceID")]/e/f') T(c);

SELECT @temp;

SET @value.modify('insert sql:variable("@temp") as last into (/foo/bar[barId =sql:variable("@DestinationID")]/e)[1]')

SELECT @value;

它會給你這個:

<foo>
  <bar>
    <barId>66988</barId>
    <name>baz 3</name>
  </bar>
  <bar>
    <barId>66989</barId>
    <name>b </name>
    <e>
      <g>
        <h>
          <l>-</l>
          <m>k</m>
        </h>
        <h>
          <l>p  v</l>
          <m>k</m>
        </h>
      </g>
      <f>
        <h>
          <i>k</i>
          <j>9.3</j>
        </h>
      </f>
    </e>
  </bar>
  <bar>
    <barId>6699</barId>
    <name>n 4 c</name>
    <e>
      <f>
        <h>
          <i>k</i>
          <j>9.3</j>
        </h>
      </f>
    </e>
  </bar>
</foo>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM