同一XML中的不同子节点

时间:2017-07-06 15:16:17

标签: sql sql-server xml

在SQL Server 2008中,有一个表要查询XML列,需要获取作为“Inc”节点子节点的节点的名称 - 在下面的示例中“Architect”和“Professor” ”。我们不知道所有子节点(教授,架构师等),所以我们不能只在外部应用所有潜在的子节点名称,但我们需要为每一行提取它们的值。 第一行:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<!-- saved from url=(0016)http://localhost -->
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Untitled 2</title>
</head>

<body>
<div align="center"> 
    <table id="table1" style="border-collapse: collapse" width="700" cellspacing="0" cellpadding="0" border="0"> 
        <tbody>
            <tr>
                <td colspan="6"> &nbsp;</td>
            </tr> 
            <tr> 
                <td colspan="6"> 
                    <a href="https://stackoverflow.com/questions/44902558/accessing-object-in-iframe-using-vba">
                        <img src="img.gif" width="38" height="38" border="0" align="right">
                    </a>
                    <strong>x - </strong>
                </td>
            </tr> 
        </tbody>
    </table>
</div>

</body>

</html>

第二行:

  <Inc>
    <Architect>
        <ArchitectLevel>
          <Average>100000</Average>
        </ArchitectLevel>
    </Architect>
  </Inc>

现在有人怎么做?

1 个答案:

答案 0 :(得分:2)

使用local-name()演示

declare @x xml =
'<Inc>
  <Architect>
        <ArchitectLevel>
          <Average>100000</Average>
        </ArchitectLevel>
    </Architect>
</Inc>
<Inc>
    <Professor>
        <ProfessorLevel>
            <Maximum>100000</Maximum>
            <Minimum>1000</Minimum>
        </ProfessorLevel>
    </Professor>
</Inc>';

select t.n.value('local-name(.)[1]','varchar(100)')
from @x.nodes('Inc/*') t(n)