سؤال

لهذا xml (في SQL 2005 XML عمود):

<doc>
 <a>1</a>
 <b ba="1" bb="2" bc="3" />
 <c bd="3"/>
<doc>

أود أن تكون قادرة على استرجاع الأسماء من الصفات (ba, bb, bc, bd) بدلا من القيم داخل SQL Server 2005.حسنا, XPath بالتأكيد يسمح هذا مع اسم() ولكن SQL server لا يدعم هذا.هذا هو رئيس الشكوى مع استخدام XML في SQL;لديك لمعرفة أي أجزاء من XML/Xpath/XQuery المواصفات هناك.

الطريقة الوحيدة التي أستطيع أن أفكر في القيام بذلك هو بناء CLR proc أن الأحمال XML إلى مستند XML (iirc) ويعمل XPath لاستخراج أسماء العقد.أنا منفتح على الاقتراحات هنا.

هل كانت مفيدة؟

المحلول

DECLARE @xml as xml
DECLARE @path as varchar(max)
DECLARE @index int, @count int

SET @xml = 
'<doc>
 <a>1</a>
 <b ba="1" bb="2" bc="3" />
 <c bd="3"/>
</doc>'



SELECT @index = 1

SET @count = @xml.query('count(/doc/b/@*)').value('.','int')

WHILE @index <= @count 
BEGIN
    SELECT  @xml.value('local-name((/doc/b/@*[sql:variable("@index")])[1])', 'varchar(max)')
    SET @index = @index + 1
END

عن العنصر "ب"

فإنه يعود

  • با
  • bb
  • قبل الميلاد

يمكنك بناء حلقة للحصول على سمات كل عنصر في xml.

راجع للشغل XML في العينة الخاصة بك يجب أن تكون مغلقة في الختام دكتور الوسم.

نصائح أخرى

DECLARE @xml as xml

SET @xml = 
'<doc>
 <a>1</a>
 <b ba="1" bb="2" bc="3" />
 <c bd="3"/>
</doc>'

SELECT DISTINCT
 CAST(Attribute.Name.query('local-name(.)') AS VARCHAR(100)) Attribute,
 Attribute.Name.value('.','VARCHAR(100)') Value
FROM @xml.nodes('//@*') Attribute(Name)

وإرجاع:

وقيمة السمة

وبا 1

وب 2

وق 3

ودينار بحريني 3

وهذا:

declare @xml as xml

set @xml = 
'<doc>
 <a>1</a>
 <b ba="1" bb="2" bc="3" />
 <c bd="3"/>
</doc>'

select @xml.query('
    for $attr in /doc/b/@*
    return local-name($attr)') 

والعوائد:

وبا ب ب ق

Declare @xml Xml = '<doc><a>1</a><b ba="1" bb="2" bc="3" /><c bd="3"/></doc>'

Select n.value('local-name(.)', 'varchar(max)')  from @xml.nodes('/doc/*/@*') a(n)

وعودة با ب قبل الميلاد دينار بحريني

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top