Есть ли способ помешать Eclipse (3.7) испортить содержимое тегов ?

#xml #eclipse #xsd

#xml #eclipse #xsd

Вопрос:

Если я пишу многострочную документацию в XML-схеме, используя представление свойств, оно создает <xsd:documentation> теги для ее хранения.

Всякий раз, когда я форматирую файл (CTRL SHIFT F), все строки, кроме первой, имеют отступ, а иногда и переносятся из-за этого отступа.

Это отступ и перенос эффективно разрушают все усилия по созданию красивой документации из файла. Особенно, если я хочу документировать таблицу допустимых значений.

Перед форматированием:

 <xsd:documentation>1st line of comment
2nd line is indented and also wrapped as it exceeds the max line length setting.
3rd line is just indented.
</xsd:documentation>
  

После форматирования:

 <xsd:documentation>1st line of comment
    2nd line is indented and also wrapped as it exceeds the max line 
    length setting.
    3rd line is just indented.
</xsd:documentation>
  

Опция «Форматировать комментарии» в настройках -> XML -> XML-файлы -> Редактор не помогает с отступом. Увеличение «ширины строки» на той же странице настроек исправляет перенос, но я действительно хочу, чтобы редактор НЕ форматировал содержимое моих элементов документации.

Ответ №1:

Вы можете добавить атрибут xml xml:space="preserve" xsd:documentation , чтобы указать, что пробелы должны быть сохранены. Например:

 <xsd:documentation xml:space="preserve" >1st line of comment
    2nd line is indented and also wrapped as it exceeds the max line length setting.
    3rd line is just indented.
</xsd:documentation>
  

Комментарии:

1. Я предпочитаю использовать этот атрибут, а не добавленный тег CDATA, он выглядит чище, он понятен сам по себе, и мне не нужно явно указывать Eclipse игнорировать текст, завернутый в CDATA. Мой трюк заключается в том, чтобы добавить весь мой многострочный текст в одну строку, использовать код формата в Eclipse, а затем добавить атрибут xml:space для сохранения форматирования.

Ответ №2:

Опция «Форматировать комментарии» предназначена для комментариев XML:

 <!-- comment -->
  

Вот почему это работает не так, как вы хотите.

Я не понимаю, с какой проблемой вы столкнулись, установив для параметра «ширина строки» значение max (в версии 3.7 оно равно 999).

Если ваш XML:

 <xsd:documentation>1st line of comment
    2nd line is indented and also wrapped as it exceeds the max line length setting.
    3rd line is just indented.
</xsd:documentation>
  

Тогда установка «ширины строки» на 999 и форматирование не изменит ваш контент. К сожалению, нет возможности отключить проверку ширины (например, чтобы установить «ширину строки» в 0).

редактировать: похоже, что при использовании <![CDATA[, Eclipse не форматирует содержимое (по крайней мере, отступы и перенос строк), пример:

 <root>
    <documentation><![CDATA[
                1st line of comment

                2nd line is indented and also wrapped as it exceeds the max line length setting.

                3rd line is just indented.
        ]]></documentation>
</root>
  

Комментарии:

1. Конечно, я могу установить ширину строки, но проблема в том, что я написал документацию в определенном формате, а Eclipse продолжает ее переформатировать. Добавляется не только перенос строк, но и отступ. Когда я пытаюсь сгенерировать документацию с помощью такого инструмента, как XML Spy, документация плохо отформатирована, частично из-за отступов, добавленных Eclipse.

2. Также бывает, что сам Eclipse, форматируя документацию, делает документацию очень странной в редакторе свойств.

3. Я понимаю, может быть, вам стоит попробовать некоторые плагины из Eclipse Marketplace и найти лучший редактор XML.

4. Спасибо за предложения. Да, я, вероятно, попробую интеграцию XML Spy с Eclipse в следующий раз. В то время, когда я задавал вопрос, у меня не было лицензии XML Spy, необходимой для работы с файлами WSDL. Похоже, другого решения нет, если я не смогу найти время для создания собственного патча для Eclipse, и я не вижу, чтобы это произошло в ближайшее время.

5. смотрите мой отредактированный ответ использовании <! [CDATA[ возможно, это то, что вам нужно, но вы должны попробовать, если это соответствует вашим требованиям

Ответ №3:

Попробуйте использовать его следующим образом:

 <xsd:documentation><![CDATA[ 1st line of comment
2nd line is indented and also wrapped as it exceeds the max line 
length setting.
3rd line is just indented.]]></xsd:documentation>
  

Но ТАКЖЕ попробуйте установить

 <?xml version="1.0" encoding="UTF-16"?>
  

в вашем файле, если вы его еще не используете. Новые строки в xml могут быть проблематичными между ASCII и UTF-16

Ответ №4:

Установите параметр «Сохранять пробелы в тегах с содержимым PCDATA».

Комментарии:

1. Похоже, это действительно то, что нужно установить. Но это не имеет никакого эффекта, когда я пытаюсь это сделать. Поскольку мой вопрос касался редактирования файла XML-схемы, я также протестировал простой XML-файл с этим параметром, но я все равно получаю те же результаты. Вы пробовали фрагмент из вопроса? Я также заметил, что файл переформатируется дважды, если я дважды применяю команду format . Выполнение этого в третий раз не приводит к дополнительным изменениям.

2. Это потому, что у вас нет ничего, что говорило бы eclipse о том, что внутри элемента documentation находится элемент PCData, см. Ошибка Eclipse 361708 .