【发布时间】:2012-10-10 00:50:57
【问题描述】:
我正在尝试在 TSQL 中修改预定义的 xml(更具体地说是 xsd)。 我想将枚举限制插入 xsd 元素之一。
任务是根据查询填充xsd限制 示例:
create table #list(value nvarchar(100))
insert into #list values('item 1')
insert into #list values('item 2')
insert into #list values('item 3')
insert into #list values('item 4')
insert into #list values('item 5')
insert into #list values('item 6')
declare @enumeration as xml
;with xmlnamespaces('http://www.w3.org/2001/XMLSchema' as xs)
select @enumeration = (
select value as '@value'
from #list for xml path('xs:enumeration')
)
declare @schema xml
set @schema =
'<xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="test">
<xs:element name="test" msdata:IsDataSet="true" msdata:MainDataTable="Example" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="Example">
<xs:complexType>
<xs:sequence>
<xs:element name="myList" minOccurs="1" nillable="false">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="50" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>'
set @schema.modify
('insert sql:variable("@enumeration")
into (//xs:element[@name=''myList'']/xs:simpleType/xs:restriction)[1]')
select @schema
问题是代码输出了不必要的xmlns属性
<xs:enumeration xmlns:xs="http://www.w3.org/2001/XMLSchema" value="item 1" />
谁能帮忙?
【问题讨论】:
-
祝你好运。请记住:训练自己接受不必要但无害的命名空间声明通常比让系统停止发出它们要快。
-
不完全是你的情况,但你可以找到答案here。换句话说:如果你不能忽略它并且 xml->nvarchar(max)->replace->xml 不够优雅,你总是可以写一个 CLR ;)
-
我同意 Ozren Tkalčec Krznarić 关于 CLR 的看法
-
@tr3 真正的问题是你能说出他的名字吗
-
@АртёмЦарионов 完美吗?不是,但也许我可以:) 我大部分时间都在斯拉夫人口附近度过,也许我可以正确地发音他的名字:P
标签: sql sql-server xml tsql xsd