You can handle any number of nodes that could repeat, but remember that this always creates many rows for a single <Physician> entry.
Try the following:
DECLARE @Content TABLE (ID INT NOT NULL, XmlDAta XML) INSERT INTO @content VALUES(1, '<root> <Physicians> <name>Dr. Excellent</name> <picture></picture> <gender>Male</gender> <langAccept>English</langAccept> <langAccept>Spanish</langAccept> <insAccept>Aetna</insAccept> <insAccept>BCBS</insAccept> <specialty></specialty> <specialty2></specialty2> <specialty3></specialty3> </Physicians> </root>') SELECT ID, PhysicianName = XC.value('(name)[1]', 'varchar(50)'), Gender = XC.value('(gender)[1]', 'varchar(50)'), LangSpoken = XLang.value('.', 'varchar(20)'), InsAccepted = XIns.value('.', 'varchar(50)') FROM @Content CROSS APPLY XmlData.nodes('/root/Physicians') AS XT(XC) CROSS APPLY XC.nodes('langAccept') AS XT2(XLang) CROSS APPLY XC.nodes('insAccept') AS XT3(XIns)
Using .nodes() on langAccept and insAccept inside the <Physician> node, you will get all the defined values ββ- but you will get several relational strings for one <Physican> node:

Update: to get data from your own existing table, use this:
SELECT ID, PhysicianName = XC.value('(name)[1]', 'varchar(50)'), Gender = XC.value('(gender)[1]', 'varchar(50)'), LangSpoken = XLang.value('.', 'varchar(20)'), InsAccepted = XIns.value('.', 'varchar(50)') FROM [MyDB].[dbo].Content CROSS APPLY CAST(content_html AS XML).nodes('/root/Physicians') AS XT(XC) CROSS APPLY XC.nodes('langAccept') AS XT2(XLang) CROSS APPLY XC.nodes('insAccept') AS XT3(XIns)
marc_s
source share