簡體   English   中英

以XML / XSD格式返回C / C ++結構數組

[英]Returning C/C++ structure array in XML/XSD format

我正在編寫一個本機C / C ++ .dll程序,該程序調用許多第三方C / C ++庫的.dll函數,並通過0-n行返回18列的ac / c ++結構數組(SA)。 然后,由WCF C#Web服務程序捕獲此返回值,該程序與我的.dll“互操作”,並使用.net xml庫在將消息發送到Web Service客戶端之前序列化結果。

我在這里看到了開銷:(a)在返回之前准備用C / C ++填充SA的數據,以及(b)一旦由C#Web服務程序接收到該SA並將其序列化為XML。

為了避免這種開銷,我認為與其代替在我的C / C ++ dll中填充SA,還應填充到一個XML序列化的字符串或文件中,然后將此結果返回給C#Web服務程序,該程序將僅直接發送已序列化的數據給客戶。

在這一點上,我想知道:

1)如果我的想法是正確的。

2)如果是,除了將數據填充到XML中之外,我還想包括-作為標題-列,長度和數據類型的名稱。 有人說我應該創建一個XSD字符串/文件來描述該標頭。 你怎么看待這件事?

3)對於返回的XML數據沒有問題,我應該考慮將哪些事情納入C#程序中? XSD數據?

感謝您的禮貌閱讀。

XSD(XML模式)對於驗證和描述XML格式最有用。 根據我的經驗,這不是您通常會忽略的事情,通常端點已經擁有了架構。 如果您可以控制兩個應用程序(我假設您可以做到),則可以忽略它,而只使用XML。

但是,如果您出於某種原因不信任它,則可以在C#代碼中包含Schema並從C ++部分驗證XML。 同樣,如果您要將XML交給第三方,則架構也很有用。

您可能會遇到的一件事是字符編碼。 當您將XML傳遞給客戶端時,您需要確保您的XML是utf-8(如果已在XML聲明中相應地設置了encoding屬性,但默認情況下是utf-8),則需要進行其他設置。 這可以在C ++部分中完成,或者可能在C#部分中更輕松。

我認為您沒有必要采取步驟是正確的,但是考慮是否要以其他非XML形式使用C ++部分中的數據也許很有用。 在這種情況下,您可能已經擁有的格式可能會有用。


我為您提供了一個示例架構,每一行都有一個名稱,長度和類型:

<?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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM