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

Все, что вы хотели знать о программизме, но боялись спросить.
Ответить
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

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

Сообщение 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 по умолчанию.

Спасибо.
Аватара пользователя
Bora
Житель
Сообщения: 613
Зарегистрирован: 06 ноя 2005, 19:11

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

Сообщение 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:
Аватара пользователя
Marmot
Графоман
Сообщения: 39279
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Сообщение Marmot »

vg
Это концептуальная проблема: элемент в default namespace это совсем не то-же самое что элемент без namespace.
Когда XmlTextWriter выводит xmlns=”” это означает игнорирование текущего default namespace.
Так что, без специфицации NS, похоже, никак, в вашем случае, не обойтись.
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

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

Сообщение 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:
Я мальчик и не многожёнец
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

Marmot писал(а):vg
Это концептуальная проблема: элемент в default namespace это совсем не то-же самое что элемент без namespace.
Когда XmlTextWriter выводит xmlns=”” это означает игнорирование текущего default namespace.
Так что, без специфицации NS, похоже, никак, в вашем случае, не обойтись.
Согласен, что это не одно и тоже. Но всё же ... если не задавать при создании документа namespace, то ведь XmlTextWriter и невыводит xmlns=”” . Почему же ему не считать что все теги принадлежат (определены) по умолчанию тому пространству имён, что использовано при создании документа (документ загружает xml LoadXml с указанием namespace).
Аватара пользователя
Marmot
Графоман
Сообщения: 39279
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Сообщение 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 будет очень легко запутаться.
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

Спасибо за мнение. Похоже, что Вы правы. По крайней мере на других форумах я встречал точку зрения, близкую к Вашей. Ну и кроме того, "накладные расходы", конечно, мизерны.
Аватара пользователя
Leo Gan
Маньяк
Сообщения: 1764
Зарегистрирован: 29 апр 2005, 16:55
Откуда: где-то рядом с жёлтым карликом
Контактная информация:

Сообщение Leo Gan »

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

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