<game xmlns="http://my.name.space" ></game>
Это мой корневой элемент. Я написал хранимую процедуру для вставки в нее элементов. Подводя итог хранимую процедуру, вот SQL-XQuery Вставка без пространства имен SQL2008
UPDATE ChessGame SET GameHistory.modify('insert <move><player>black</player><piece>pawn</piece><start>E7</start><end>E6</end></move> as last into (/game)[0]') WHERE Id = @GameId;
Теперь, когда MSSQL делает вставку пустое пространство имен также вставляется так что результат этого
<move xmlns="">
<player>black</player>
<piece>king</piece>
<start>E7</start>
<end>E6</end>
</move>
Теперь я попытался использовать как
WITH XMLNAMESPACES(DEFAULT 'http://my.name.space')
и
GameHistory.modify('declare default element namespace "http://my.name.space"; insert ...')
Но в итоге я получаю префиксы везде и декларация пространства имен для каждого элемента.
Проблемы возникают в библиотеках кода, которым не хватает логики для обработки префиксов, вставленных в MSSQL. В конце концов, я просто хочу вставить новый элемент в свой корень xml и оставить пустое пространство имен (используйте корень по умолчанию?). Я все очень новичок в этом, но, насколько я понимаю, если у меня есть пространство имен в моем корневом элементе, не все ли дочерние узлы имеют пространство имен по умолчанию моего корня?
Оба ваших сообщений работают 100% я нашел проблему, которая ломает мое, хотя. как последний в (/ game) [0] должен быть последним в (/ game) [1] Не означает ли [0] первое появление элемента? Очень похоже на массив с нулевым значением? – Matt
@RBarry: почему вы предпочитаете '/ *: node'? Означает ли это «игровой узел с * любым * пространством имен»? –
Мэтт: Нет, это порядковый номер: [1] - это первый экземпляр. – RBarryYoung