Страница 1 из 1

Как избавиться от атрибутов элементов xmlns=””

Добавлено: 25 дек 2005, 18:48
vg
Документ, что нужно получить выглядит приблизительно так

Код: Выделить всё

<?xml version="1.0" encoding="UTF-8" ?> 
<Research researchID="XCVD3427SF" 
< skip>
 xmlns="http://www.xxxx.org/2000/XML" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="bla=bla-bla ">
<Product productID=" XCVD3427SF ">

<skip>

< /Product>
<skip>
<skip>

</Research>
Если вставлять элемент, созданный как

Код: Выделить всё

XmlElement Product = doc.CreateElement( "Product")
то XmlTextWriter добавит пустой xmlns=””. Т.е. вместо требуемого документа мы получим нечто:

Код: Выделить всё

<Product xmlns=”” productID=" XCVD3427SF ">
<skip>
< /Product>
<skip>
<skip>
Можно конечно создавать элемент с указанием namespace, типа

Код: Выделить всё

XmlElement Product = doc.CreateElement( "Product", "http://www.xxxx.org/2000/XML")
Тогда всё ОК. Но не думаю, что нельзя как-то объяснить XmlTextWriter, что надо использовать http://www.xxxx.org/2000/XML по умолчанию.

Спасибо.

Re: Как избавиться от атрибутов элементов xmlns=””

Добавлено: 25 дек 2005, 19:13
Bora
vg писал(а):Документ, что нужно получить выглядит приблизительно так

Код: Выделить всё

<?xml version="1.0" encoding="UTF-8" ?> 
<Research researchID="XCVD3427SF" 
< skip>
 xmlns="http://www.xxxx.org/2000/XML" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="bla=bla-bla ">
<Product productID=" XCVD3427SF ">

<skip>

< /Product>
<skip>
<skip>

</Research>
Если вставлять элемент, созданный как

Код: Выделить всё

XmlElement Product = doc.CreateElement( "Product")
то XmlTextWriter добавит пустой xmlns=””. Т.е. вместо требуемого документа мы получим нечто:

Код: Выделить всё

<Product xmlns=”” productID=" XCVD3427SF ">
<skip>
< /Product>
<skip>
<skip>
Можно конечно создавать элемент с указанием namespace, типа

Код: Выделить всё

XmlElement Product = doc.CreateElement( "Product", "http://www.xxxx.org/2000/XML")
Тогда всё ОК. Но не думаю, что нельзя как-то объяснить XmlTextWriter, что надо использовать http://www.xxxx.org/2000/XML по умолчанию.

Спасибо.
Предлагаю это обсудить в женсовете :twisted: :lol:

Добавлено: 25 дек 2005, 19:48
Marmot
vg
Это концептуальная проблема: элемент в default namespace это совсем не то-же самое что элемент без namespace.
Когда XmlTextWriter выводит xmlns=”” это означает игнорирование текущего default namespace.
Так что, без специфицации NS, похоже, никак, в вашем случае, не обойтись.

Re: Как избавиться от атрибутов элементов xmlns=””

Добавлено: 25 дек 2005, 19:59
vg
Bora писал(а):
vg писал(а):Документ, что нужно получить выглядит приблизительно так

Код: Выделить всё

<?xml version="1.0" encoding="UTF-8" ?> 
<Research researchID="XCVD3427SF" 
< skip>
 xmlns="http://www.xxxx.org/2000/XML" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="bla=bla-bla ">
<Product productID=" XCVD3427SF ">

<skip>

< /Product>
<skip>
<skip>

</Research>
Если вставлять элемент, созданный как

Код: Выделить всё

XmlElement Product = doc.CreateElement( "Product")
то XmlTextWriter добавит пустой xmlns=””. Т.е. вместо требуемого документа мы получим нечто:

Код: Выделить всё

<Product xmlns=”” productID=" XCVD3427SF ">
<skip>
< /Product>
<skip>
<skip>
Можно конечно создавать элемент с указанием namespace, типа

Код: Выделить всё

XmlElement Product = doc.CreateElement( "Product", "http://www.xxxx.org/2000/XML")
Тогда всё ОК. Но не думаю, что нельзя как-то объяснить XmlTextWriter, что надо использовать http://www.xxxx.org/2000/XML по умолчанию.

Спасибо.
Предлагаю это обсудить в женсовете :twisted: :lol:
Я мальчик и не многожёнец

Добавлено: 25 дек 2005, 20:07
vg
Marmot писал(а):vg
Это концептуальная проблема: элемент в default namespace это совсем не то-же самое что элемент без namespace.
Когда XmlTextWriter выводит xmlns=”” это означает игнорирование текущего default namespace.
Так что, без специфицации NS, похоже, никак, в вашем случае, не обойтись.
Согласен, что это не одно и тоже. Но всё же ... если не задавать при создании документа namespace, то ведь XmlTextWriter и невыводит xmlns=”” . Почему же ему не считать что все теги принадлежат (определены) по умолчанию тому пространству имён, что использовано при создании документа (документ загружает xml LoadXml с указанием namespace).

Добавлено: 25 дек 2005, 20:29
Marmot
vg писал(а):Согласен, что это не одно и тоже. Но всё же ... если не задавать при создании документа namespace, то ведь XmlTextWriter и невыводит xmlns=”” .
Потому что в это случае все элементы (и аттрибуты) не находятся ни в каком NS.
vg писал(а): Почему же ему не считать что все теги принадлежат (определены) по умолчанию тому пространству имён, что использовано при создании документа (документ загружает xml LoadXml с указанием namespace).
Не забывайте, что default namespace можно поменять в любой момент, например вот таким образом:

Код: Выделить всё

<el1 xmlns="bla1:bla1:bla1" >
  bla bla bla
  <el2 xmlns="bla2:bla2:bla2" >
    some other crap in new NS
  </el2>
</el1>
Так что при работе с документом на уровне DOM API будет очень легко запутаться.

Добавлено: 25 дек 2005, 20:58
vg
Спасибо за мнение. Похоже, что Вы правы. По крайней мере на других форумах я встречал точку зрения, близкую к Вашей. Ну и кроме того, "накладные расходы", конечно, мизерны.

Добавлено: 27 дек 2005, 23:11
Leo Gan
BTW имейте в виду, что namespace желательно задавать в рамках корпоративного стандарта. сейчас вырабатывается некий стандарт, которому, например, в нашей компании всегда предпочитают следовать.
А именно http://CompanyName.NameOfInitiative.Nam ... meOfSchema, т.е. к примеру
http://MyCompany.Accounting.Transformat ... 202.NV1234
понимаю, что сначала выглядит диковато.
Но когда проникаешься тем, что схема, т.е.namespace - интерфейс, побликуемый для всего остального мира, то все становится на свои места.

PS извиняюсь за такие очевидные вещи, но с завидной постоянностью натыкаюсь на tempuri.org namespace, или того лучше, вообще без оного (понимаю стремление очистить пространство от непонятных вещей)