Возвращение структурного массива C / C ++ в формате XML / XSD - PullRequest
0 голосов
/ 23 августа 2009

Я пишу нативную C / C ++ .dll программу, которая вызывает функции .dll многих сторонних библиотек C / C ++ и возвращает структурный массив (SA) c / c ++ из 18 столбцов по 0-n строк. Это возвращенное значение затем захватывается программой веб-службы WCF C #, которая "взаимодействует" с моим .dll и, используя библиотеку .net xml, сериализует результат перед отправкой сообщения клиенту веб-службы.

Здесь я вижу дополнительные издержки: (a) подготовить данные в C / C ++ для заполнения SA перед возвратом и (b) сериализовать этот SA в XML, как только он будет получен программой веб-службы C #.

Чтобы избежать этих издержек, я думаю, что вместо заполнения SA в моей dll C / C ++, я должен заполнить сериализованную XML-строку или файл, а затем вернуть этот результат в программу веб-службы C #, которая будет отправлять только уже сериализованные данные напрямую клиенту.

На данный момент я хотел бы знать:

1) Если моя мысль верна.

2) Если да, кроме заполнения данных в XML, я также хотел бы включить - в качестве заголовка - имя столбцов, длин и типов данных. Кто-то сказал мне, что я должен создать строку / файл XSD для описания этого заголовка. Что вы думаете об этом?

3) Какие вещи я должен учитывать в программе на C #, чтобы не было проблем с возвратом данных XML? Данные XSD?

Спасибо за вашу любезность в чтении этого.

1 Ответ

0 голосов
/ 28 августа 2009

XSD (схема XML) в основном полезна для проверки и описания форматов XML. Это не то, что вы обычно передаете по моему опыту, часто конечные точки уже имеют Схему под рукой. Если у вас есть контроль над обоими приложениями, что, как я полагаю, у вас есть, вы можете опустить это и просто перейти к XML.

Однако вы можете иметь схему в своем коде C # и проверять XML из части C ++, если по какой-то причине вы ей не доверяете. Кроме того, если вы собираетесь передать этот XML какой-либо третьей стороне, схема также может быть полезна.

Единственное, с чем вы можете столкнуться, это кодировка символов. Вам нужно убедиться, что ваш XML - это utf-8 (или что-то еще, если вы соответственно установили атрибут кодировки в декларации XML, но utf-8 по умолчанию), когда вы передаете его клиенту. Это можно сделать в части C ++ или, возможно, проще в части C #.

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


Я включил пример схемы для вас, каждая строка имеет имя, длину и тип:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="row-column-format">
  <xs:element name="rows">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="column">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:string">
                <xs:attribute name="name" type="xs:string" />
                <xs:attribute name="type" type="xs:string" />
                <xs:attribute name="length" type="xs:int" />
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Он описывает формат XML этой структуры:

<?xml version="1.0" encoding="utf-8"?>
<rows xmlns="row-column-format">
  <column name="name1" type="type1" length="1" xmlns="">column1</column>
</rows>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...