имя элемента xml с двоеточием

Мы используем PDFLib на работе. Заплаченная версия не является очень дорогой, и существует более ограниченный выпуск с открытым исходным кодом, если Вы неспособны выйти из оболочки для заплаченной версии.

20
задан skaffman 24 November 2009 в 20:49
поделиться

4 ответа

Хорошо, вот оно.

XmlDocument.CreateElement("prefix", "name", "uri");

укажите здесь, если это поможет кому-то другому: http://msdn.microsoft.com/en-us/library/c22k3d47.aspx 1

14
ответ дан 30 November 2019 в 00:40
поделиться

Опубликованный вами XML-документ на самом деле неправильно сформирован, потому что Аббревиатура ns2 , присвоенная многим элементам, не связана с пространством имен. Исправлено, это может выглядеть так:

<ns1:E xmlns:ns1="schema" xmlns:ns2="my-namespace">
  <ns1:B>
    <ns2:S>
      <ns2:V>
        <ns2:Bl />
       </ns2:V>
    </ns2:S>
  </ns1:B>
</ns1:E>

Вышеупомянутый XML-документ семантически эквивалентен этому:

<s:E xmlns:s="schema">
  <s:B>
    <S xmlns="my-namespace">
      <m:V xmlns:m="my-namespace">
        <s:Bl xmlns:s="my-namespace"/>
      </m:V>
    </S>
  </s:B>
</s:E>

И этому:

<E xmlns="schema">
  <B xmlns="schema">
    <S xmlns="my-namespace">
      <V>
        <Bl/>
      </V>
    </S>
  </B>
</E>

Во всех трех случаях, элементы E и B находятся в пространстве имен схемы , а элементы S , V и Элементы] Bl находятся в пространстве имен my-namespace .

Префиксы пространства имен полезны, но, строго говоря, они не нужны. Вы можете создавать XML-документы, подобные последнему примеру, которые не используют префиксов и которые явно объявляют пространство имен для каждого элемента.

Если при обработке XML вы думаете, что вам небезразлично, какой префикс использует данный элемент, вы почти наверняка неправ. Единственное, что вас волнует, это то, к какому пространству имен он принадлежит. Например, если я загружу любой из этих трех документов в XmlDocument , следующий код запишет элемент «Bl»:

    XmlNamespaceManager ns = new XmlNamespaceManager(d.NameTable);
    ns.AddNamespace("a", "schema");
    ns.AddNamespace("b", "my-namespace");
    Console.Write(d.SelectSingleNode("/a:E/a:B/b:S/b:V/b:Bl", ns).OuterXml);

Когда вы скажете:

I дон' Я хочу, чтобы в выводе была ссылка на схему, но мне нужен префикс. Результат, которого я хочу достичь, будет просто .

вы почти наверняка ошибаетесь. Элемент с тегом ns1: E не имеет смысла, если префикс ns1 не отображается в пространство имен, либо в этом элементе, либо в одном из его предков. (Кроме того, пространство имен не является ссылкой на схему.) Если вы используете

CreateElement("ns1", "E", "schema");

для создания элемента, а затем добавляете его к элементу, который уже объявил ns1 как префикс для schema , тогда DOM добавит элемент без объявления пространства имен, потому что в этом контексте он не нужен. Если ns1 не объявлен (или объявлен как сокращение некоторого пространства имен, отличного от схемы ),

5
ответ дан 30 November 2019 в 00:40
поделиться

Двоеточия указывают, что эти элементы находятся в пространстве имен ns1 . Это необходимо, когда вы используете несколько схем. Предполагая, что в документе используется только ns1, это по сути эквивалентно отсутствию «ns1:» в этих тегах. См. это руководство для получения дополнительной информации.

5
ответ дан 30 November 2019 в 00:40
поделиться

Слово перед двоеточием - это пространство имен. Если вы хотите иметь элемент «ns1: E», вам необходимо создать элемент с именем «E» и установить для его пространства имен значение «ns1».

0
ответ дан 30 November 2019 в 00:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: