2017-08-17 1 views
0

以前はSQLの名前空間を使用してXMLを解析しましたが、実際にこの問題を解決しています。私はxmlからipアドレスを抽出しようとしていますが、運がありません。私はそれがxsd名前空間と何か関係があると思っていますが、名前空間宣言とノードパスの正しい組合せを見つけることはできません。 XMLにSQL Server 2012でT-SQLを使用してXMLを解析する

WITH XMLNAMESPACES ('http://www.w3.org/2001/XMLSchema' as xsd) 
    SELECT a.b.value('ipAddress[1]', 'varchar(100)') AS ipaddress 
    FROM @sam_xml.nodes('/obj/GuestStackInfo/dnsConfig') a(b) 

感謝を解析するために、次のコードを使用して

<obj xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:vim25" versionId="6.0" xsi:type="ArrayOfGuestStackInfo"> 
    <GuestStackInfo xsi:type="GuestStackInfo"> 
    <dnsConfig> 
     <dhcp>false</dhcp> 
     <hostName>SXVCUP05</hostName> 
     <domainName>corp.dtcc.com</domainName> 
     <ipAddress>172.18.18.13</ipAddress> 
     <ipAddress>172.18.18.20</ipAddress> 
     <ipAddress>172.22.43.132</ipAddress> 
     <ipAddress>172.22.43.148</ipAddress> 
     <ipAddress>172.22.37.68</ipAddress> 
     <ipAddress>172.22.37.84</ipAddress> 
     <searchDomain>corp.dtcc.com</searchDomain> 
     <searchDomain>dtcc.com</searchDomain> 
     <searchDomain>backup.dtcc.com</searchDomain> 
    </dnsConfig> 
    <ipRouteConfig> 
     <ipRoute> 
     <network>0.0.0.0</network> 
     <prefixLength>0</prefixLength> 
     <gateway> 
      <ipAddress>172.28.224.1</ipAddress> 
      <device>0</device> 
     </gateway> 
     </ipRoute> 
     <ipRoute> 
     <network>172.18.8.133</network> 
     <prefixLength>32</prefixLength> 
     <gateway> 
      <ipAddress>172.28.224.10</ipAddress> 
      <device>0</device> 
     </gateway> 
     </ipRoute> 
     <ipRoute> 
     <network>172.22.8.14</network> 
     <prefixLength>32</prefixLength> 
     <gateway> 
      <ipAddress>172.28.224.10</ipAddress> 
      <device>0</device> 
     </gateway> 
     </ipRoute> 
     <ipRoute> 
     <network>172.28.224.0</network> 
     <prefixLength>24</prefixLength> 
     <gateway> 
      <device>0</device> 
     </gateway> 
     </ipRoute> 
     <ipRoute> 
     <network>172.28.224.112</network> 
     <prefixLength>32</prefixLength> 
     <gateway> 
      <device>0</device> 
     </gateway> 
     </ipRoute> 
     <ipRoute> 
     <network>172.28.224.255</network> 
     <prefixLength>32</prefixLength> 
     <gateway> 
      <device>0</device> 
     </gateway> 
     </ipRoute> 
     <ipRoute> 
     <network>224.0.0.0</network> 
     <prefixLength>4</prefixLength> 
     <gateway> 
      <device>0</device> 
     </gateway> 
     </ipRoute> 
     <ipRoute> 
     <network>255.255.255.255</network> 
     <prefixLength>32</prefixLength> 
     <gateway> 
      <device>0</device> 
     </gateway> 
     </ipRoute> 
    </ipRouteConfig> 
    </GuestStackInfo> 
</obj> 

は、ここでXMLのサンプルです!

+0

''の子はすべて 'xmlns =" urn:vim25 "'という名前空間にあります。 – zx485

答えて

2

あなたが探している値は、デフォルトのネームスペースxmlnsにあります。これは、あなたが宣言する必要がある唯一の名前空間です。

DECLARE @sam_xml XML= 
N'<obj xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:vim25" versionId="6.0" xsi:type="ArrayOfGuestStackInfo"> 
    <GuestStackInfo xsi:type="GuestStackInfo"> 
    <dnsConfig> 
     <dhcp>false</dhcp> 
     <hostName>SXVCUP05</hostName> 
     <domainName>corp.dtcc.com</domainName> 
     <ipAddress>172.18.18.13</ipAddress> 
     <ipAddress>172.18.18.20</ipAddress> 
     <ipAddress>172.22.43.132</ipAddress> 
     <ipAddress>172.22.43.148</ipAddress> 
     <ipAddress>172.22.37.68</ipAddress> 
     <ipAddress>172.22.37.84</ipAddress> 
     <searchDomain>corp.dtcc.com</searchDomain> 
     <searchDomain>dtcc.com</searchDomain> 
     <searchDomain>backup.dtcc.com</searchDomain> 
    </dnsConfig> 
    <ipRouteConfig> 
     <ipRoute> 
     <network>0.0.0.0</network> 
     <prefixLength>0</prefixLength> 
     <gateway> 
      <ipAddress>172.28.224.1</ipAddress> 
      <device>0</device> 
     </gateway> 
     </ipRoute> 
     <ipRoute> 
     <network>172.18.8.133</network> 
     <prefixLength>32</prefixLength> 
     <gateway> 
      <ipAddress>172.28.224.10</ipAddress> 
      <device>0</device> 
     </gateway> 
     </ipRoute> 
     <ipRoute> 
     <network>172.22.8.14</network> 
     <prefixLength>32</prefixLength> 
     <gateway> 
      <ipAddress>172.28.224.10</ipAddress> 
      <device>0</device> 
     </gateway> 
     </ipRoute> 
     <ipRoute> 
     <network>172.28.224.0</network> 
     <prefixLength>24</prefixLength> 
     <gateway> 
      <device>0</device> 
     </gateway> 
     </ipRoute> 
     <ipRoute> 
     <network>172.28.224.112</network> 
     <prefixLength>32</prefixLength> 
     <gateway> 
      <device>0</device> 
     </gateway> 
     </ipRoute> 
     <ipRoute> 
     <network>172.28.224.255</network> 
     <prefixLength>32</prefixLength> 
     <gateway> 
      <device>0</device> 
     </gateway> 
     </ipRoute> 
     <ipRoute> 
     <network>224.0.0.0</network> 
     <prefixLength>4</prefixLength> 
     <gateway> 
      <device>0</device> 
     </gateway> 
     </ipRoute> 
     <ipRoute> 
     <network>255.255.255.255</network> 
     <prefixLength>32</prefixLength> 
     <gateway> 
      <device>0</device> 
     </gateway> 
     </ipRoute> 
    </ipRouteConfig> 
    </GuestStackInfo> 
</obj>'; 

<dnsConfig>内からすべてのIP-アドレスを取得するために、クエリ、その後1つのレベル深く潜るために.nodes()を使用します--theクエリ:

WITH XMLNAMESPACES(DEFAULT 'urn:vim25') 
SELECT a.b.value('text()[1]', 'varchar(100)') as ipaddress 
FROM @sam_xml.nodes('/obj/GuestStackInfo/dnsConfig/ipAddress') a(b) 
+0

あなたは笑って、笑ってください。 – djangojazz

+0

ありがとうございました! – DeeBeeEh

関連する問題