Что корректный путь состоит в том, чтобы представить пустые элементы XML?

Вы также можете решить эту проблему следующим образом.

Не удалось найти канал 'translate'. В Ionic 4 отображается ошибка

Это лучший способ применить функцию щелчка и использовать переводчик.

Это решит ваш запрос.

160
задан Community 23 May 2017 в 12:18
поделиться

7 ответов

xsi: nil - это правильный способ представления значения, такого что: Когда выдается вызов getElementValue () DOM уровня 2, возвращается значение NULL. xsi: nil также используется для указания допустимого элемента без содержимого, даже если тип содержимого этого элемента обычно не допускает пустых элементов.

Если используется пустой тег, getElementValue () возвращает пустую строку ("") Если тег опущен, то никакого авторского тега даже нет. Это может семантически отличаться от установки значения «nil» (например, установка «Series» в значение «nil» может означать, что книга не принадлежит ни одной серии, в то время как отсутствие серии может означать, что ряд является неприменимым элементом к текущему элементу.)

От: XML-схема W3C

: Структуры вводят механизм сигнализации о том, что элемент должен быть принят как · действительный · когда он не имеет содержания, несмотря на тип контента, который не требует или даже обязательно разрешить пустой контент. Элемент может быть · действительным · без содержание, если оно имеет атрибут xsi: nil со значением true. элемент с меткой должен быть пустым, но может нести атрибуты, если это разрешено соответствующий комплексный тип.

Пояснение:
Если у вас есть элемент book xml и один из дочерних элементов - book: series, у вас есть несколько вариантов при его заполнении:

  1. Полное удаление элемента - это можно сделать, если вы хотите указать, что ряд не относится к этому Книга или эта книга не является частью серии. В этом случае преобразования xsl (или другие процессоры, основанные на событиях), имеющие шаблон, соответствующий book: series, никогда не будут вызваны. Например, если ваш xsl превращает элемент книги в строку таблицы (xhtml: tr), вы можете получить неправильное количество ячеек таблицы (xhtml: td), используя этот метод.
  2. Оставить элемент пустым - это может означать, что ряд является "", или неизвестно, или что книга не является частью серии. Будет вызван любой xsl-преобразователь (или другой когда-либо основанный парсер), который соответствует book: series. Значение current () будет "". Используя этот метод, вы получите то же количество тегов xhtml: td, что и в следующем описанном.
  3. Использование xsi: nil = "true" - это означает, что элемент book: series имеет значение NULL, а не просто пустой. Будет вызван ваш xsl-преобразователь (или другой анализатор на основе событий), у которого есть шаблон, соответствующий book: series. Значение current () будет пустым (не пустая строка). Основное различие между этим методом и (2) состоит в том, что в схеме типа book: series не нужно указывать пустую строку ("") в качестве допустимого значения. Это не имеет никакого смысла для элемента серии, но для элемента языка, который определен как перечислимый тип в схеме, xsi: nil = "true" позволяет элементу не иметь данных. Другим примером могут быть элементы типа decimal. Если вы хотите, чтобы они были пустыми, вы можете объединить перечислимую строку, которая позволяет только "" и десятичная дробь, или используйте десятичную дробь с нулем.
115
ответ дан 23 November 2019 в 21:33
поделиться

Канонического ответа не существует, поскольку у XML принципиально нет нулевой концепции. Но я предполагаю, что вы хотите сопоставление Xml / Object (поскольку графы объектов имеют нулевые значения); так что ответ для вас "все, что использует ваш инструмент". Если вы пишете обработку, это означает, что вы предпочитаете. Для инструментов, которые используют XML-схему, xsi: nil - путь. Для большинства картографов пропуск соответствующего элемента / атрибута является способом сделать это.

9
ответ дан 23 November 2019 в 21:33
поделиться

Это зависит от того, как вы проверяете свой XML. Если вы используете проверку XML-схемы, правильный способ представления значений null - это атрибут xsi: nil .

[ Источник ]

8
ответ дан 23 November 2019 в 21:33
поделиться

Вы используете xsi: nil , когда ваша семантика схемы указывает, что элемент имеет значение по умолчанию и что значение по умолчанию следует использовать, если элемент отсутствует. Я должен предположить, что есть умные люди, для которых предыдущее предложение не является самоочевидной ужасной идеей, но для меня это звучит как девять видов зла. Каждый формат XML, с которым я когда-либо работал, представляет нулевые значения, пропуская элемент. (Или атрибут, и удачи, отмечая атрибут с помощью xsi: nil .)

4
ответ дан 23 November 2019 в 21:33
поделиться

Простое пропускание атрибута или элемента хорошо работает в менее формальных данных.

Если вам нужна более сложная информация, схемы GML добавляют атрибут nilReason, например: в GeoSciML :

  • xsi: nil со значением "true" используется для указания того, что значение недоступно
  • nilReason может использоваться для записи дополнительной информации о пропущенных значениях; это может быть одна из стандартных причин GML ( отсутствует, неприменимо, скрыто, неизвестно ), или текст с добавлением другого: , или может быть ссылкой URI на более подробное объяснение.

Когда вы обмениваетесь данными, роль, для которой обычно используется XML, данные, отправляемые одному получателю или для определенной цели, могут скрывать содержимое, которое было бы доступно кому-то другому, кто заплатил или имел другую аутентификацию. Знание причины пропажи контента может быть очень важным.

Ученые также обеспокоены тем, почему информация отсутствует. Например, если он был удален по соображениям качества, они могут захотеть увидеть исходные неверные данные.

4
ответ дан 23 November 2019 в 21:33
поделиться

Во многих случаях целью значения Null является использование значения данных, которого не было в предыдущей версии вашего приложения.

Итак, у вас есть файл XML из вашего приложение «ReportMaster» версия 1.

Теперь в ReportMaster версии 2 добавлено еще несколько атрибутов, которые могут быть или не быть определены.

Если вы используете представление «no tag означает null», вы получаете автоматическую обратную совместимость для чтения ваш файл ReportMaster 1 xml.

2
ответ дан 23 November 2019 в 21:33
поделиться

В документации по ссылке w3

http://www.w3.org/TR/REC-xml/#sec-starttags

говорится, что это рекомендуемые формы.

<test></test>
<test/>

Атрибут, упомянутый в другом ответе, является механизмом проверки, а не представлением состояния. Пожалуйста, обратитесь к http://www.w3.org/TR/xmlschema-1/#xsi_nil

XML-схеме: структуры вводят механизм для сигнализации о том, что элемент должен быть принят как · действительный · , когда он не имеет содержимого, несмотря на тип контента, который не требует или даже обязательно разрешает пустой содержание. Элемент может быть · действительным · без содержимого, если он имеет атрибут xsi: nil со значением true. Элемент с такой маркировкой должен быть пусто , но может содержать атрибуты, если это разрешено соответствующим сложный тип.

Чтобы уточнить этот ответ: содержание

  <Book>
    <!--Invalid construct since the element attribute xsi:nil="true" signal that the element must be empty-->
    <BuildAttributes HardCover="true" Glued="true" xsi:nil="true">
      <anotherAttribute name="Color">Blue</anotherAttribute>
    </BuildAttributes>
    <Index></Index>
    <pages>
      <page pageNumber="1">Content</page>            
    </pages>
    <!--Missing ISBN number could be confusing and misguiding since its not present-->
  </Book>
</Books>
6
ответ дан 23 November 2019 в 21:33
поделиться
Другие вопросы по тегам:

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