2014-01-10 50 views
1

的子元素值如何僅獲取一次子元素值。即 當我解析從根 - >父 - >子 - >我需要循環子元素標記以獲取所有子元素值,然後解析到父結束和根結束。我不想去下一個父母 - >下一個孩子。從以下代碼獲取使用sql server

<root> 
    <parent> 
     <name>g</name> 
     <child>child1</child> 
     <child>child2</child> 
     <child>child3</child> 
    </parent> 

    <parent> 
     <name>s</name> 
     <age>23</age> 
     <child>child1</child> 
     <child>child2</child> 
     <child>child3</child> 
    </parent> 


    <parent> 
     <name>t</name> 
     <child>child1</child> 
     <child>child2</child> 
     <child>child3</child> 
    </parent> 

在這裏,我需要在不解析整個文件來獲取子元素的值只有一次。而我寫xml文件我知道這些元素值是所有父節點相同。在這種情況下,如何從上述文件中獲取child1,child2,child3。

回答

0

試試這個:

DECLARE @XML XML = '<root> 
    <parent> 
     <name>g</name> 
     <child>child1</child> 
     <child>child2</child> 
     <child>child3</child> 
    </parent> 

    <parent> 
     <name>s</name> 
     <age>23</age> 
     <child>child1</child> 
     <child>child2</child> 
     <child>child3</child> 
    </parent> 


    <parent> 
     <name>t</name> 
     <child>child1</child> 
     <child>child2</child> 
     <child>child3</child> 
    </parent> 
</root>' 

SELECT 
    ChildNodeName = XC.value('(.)[1]', 'varchar(50)'), 
    ParentName = XC.value('(../name)[1]', 'varchar(50)') 
FROM 
@XML.nodes('/root/parent/child') AS XT(XC)  

基本上,使用.nodes()得到所有<child>節點列表,然後遍歷這些子節點 - 輸出你所需要的。要到達每個<child>節點的「父」節點,請使用../name XPath表達式。

更新:,如果你只想要鮮明子數據 - 使用此查詢:

SELECT 
    DISTINCT ChildNodeName = XC.value('(.)[1]', 'varchar(50)') 
FROM 
    @XML.nodes('/root/parent/child') AS XT(XC)  
+0

感謝快速回復。你的代碼給了我9條記錄,是否有可能只獲得前3條記錄? bcz,在這裏我不考慮父母,我只想要沒有重複的子元素值。是否有可能通過SQL腳本? – Gomathipriya

+0

@Gomathipriya:更新了我的回覆 –