Создание XML в коде C++

Для меня это произошло, когда я вложил в подкласс MotionLayout и накачал его содержимое тегом <merge.... Забыл, что параметры тега слияния игнорируются и что вы должны вручную применить их обратно в коде.

Так это выглядит сейчас:

class SomeLayout : MotionLayout {

constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
    inflate(context, R.layout.some_layout, this)
    loadLayoutDescription(R.xml.some_motion_scene)
    setTransition(R.id.start, R.id.end)
}

...
9
задан HappyGoLucky 29 January 2009 в 20:13
поделиться

10 ответов

Если Вы действительно просто создаете маленькие сообщения XML, Xerces является излишеством, по моему скромному мнению. Это - библиотека синтаксического анализатора, и Вы ничего не анализируете.

6
ответ дан 4 December 2019 в 11:44
поделиться

Вы могли использовать DOM или записать владение маленьким C++ платформа поколения XML.

API Xerces был портирован от Java, и при помощи области объекта можно сделать генерацию XML из кода C++ еще легче:

XmlWriter w;
Elem book = w.Element("book");
book.addAttrib("title", "Lord of the Rings");
Elem author = e.addChild("author");
author.addAttrib("age", 43);
author.addText("Tolkien");

Это привело бы к следующему XML:

<book title="Lord of the Rings">
  <author age="43">Tolkien</author>
</book>
3
ответ дан 4 December 2019 в 11:44
поделиться

Быстрый и легкий, попробуйте TinyXml API:
http://www.grinninglizard.com/tinyxml/

3
ответ дан 4 December 2019 в 11:44
поделиться

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

2
ответ дан 4 December 2019 в 11:44
поделиться

XML создания вручную является одним из самых верных путей к безумию, о котором я знаю. В конечном счете кто-то завинтит объект где-нибудь или запаздывание bracket'll быть брошенным, или что-то... просто пользуется библиотекой. GenX был бы моим выбором.

Править: Неправильно читайте свое сообщение. Если Вы уже получили библиотеку поколения, используйте это. Не усложняйте вещи излишне, если можно избежать его.

2
ответ дан 4 December 2019 в 11:44
поделиться

метрики

сравните, сколько времени это берет Вас, чтобы вручную создать строку приблизительно дюжину раз, затем выдержать сравнение, сколько времени это берет с библиотекой.

Если Ваши члены команды будут похожи на моих, то они быстро изменят свою мелодию.

плюс, фактор во время QA, если они кодируют его неправильно и т.д...

пользуйтесь библиотекой так, как Вы можете.

1
ответ дан 4 December 2019 в 11:44
поделиться

У меня была та же проблема с желанием передать сообщения XML между встроенными устройствами.

Я записал следующее (все в одном заголовочном файле), чтобы быть быстрым API для парсинга и генерации xml. Это не поддерживает все xml функции, но для самых простых сообщений XML не нужны они так или иначе:

http://www.scottlangham.co.uk/2009/01/rapidxml-a-quick-xml-parsergenerator-for-c/

Существует использование в качестве примера, показанное в комментариях.

Для записи xml, можно сделать что-то как следующее:

int isbn = 2938237;
wstring authorName = "Isaac Asimov";
wstring borrower = "Mr. Blobby";

CWTag bookTag = libraryTag(L"Book")
    (L"author",authorName) (L"isbn",isbn) (L"borrower",borrower);
bookTag(L"Review") (L"comments", L"very good");

и это приводит к новому xml, добавляемому под тегом:

<Book author="Isaac Asimov" isbn="2938237" borrower="Mr. Blobby">
    <Review comments="very good"/>
</Book>

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

1
ответ дан 4 December 2019 в 11:44
поделиться

Я просто использовал бы дерево DOM. Тем путем Вы не должны анализировать данные назад и вперед при отправке и получении строк xml.

---Немного вне темы: Для других людей, просто отбрасывающих этим сообщением и случайно, нуждаются в ультралегком DOM xml использование платформы этот: http://www.applied-mathematics.net/tools/xmlParser.html

Это очень просто в использовании, и состоит из 2 файлов.

0
ответ дан 4 December 2019 в 11:44
поделиться

При создании среднего и крупного XML-файла Вам будет нужна библиотека для помощи Вам. При создании маленького к очень небольшому XML-файлу Вы могли бы также просто передать текст потоком в него.

astream << "<book title=\"Lord of the Rings\"><author age=\"43\">Tolkien</author></book>"

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

Как оптимизация, Вы никогда не должны изменять вещи, не измеряя, какой эффект она имела бы. Здесь, если Ваш код удобен в сопровождении, как, оставайтесь с ним. Только попытайтесь изменить его, когда это Вы измерили его пригодность для обслуживания (т.е. заметили, что его неловкое обновляет XMLs), и нашел что его занимание слишком много времени у комфорта.

0
ответ дан 4 December 2019 в 11:44
поделиться

Я на самом деле использую CMarkup из FirstObject.com.

CodeProject имеет более старое распределение и текстовое учебное руководство (http://www.codeproject.com/KB/cpp/markupclass.aspx)

Дистрибутивы исходного кода доступны, и компонент прибывает в несколько разновидностей (Разработчик, Опытный разработчик) через страницу (страницы) загрузки FirstObject.

Веб-сайт FirstObject содержит много полезных примеров, и они даже распределяют Свободный XML-редактор.

Нет я не сотрудник, но я - удовлетворенный владелец компонента.

0
ответ дан 4 December 2019 в 11:44
поделиться
Другие вопросы по тегам:

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