【问题标题】:Returning C/C++ structure array in XML/XSD format以 XML/XSD 格式返回 C/C++ 结构数组
【发布时间】:2009-08-22 23:14:20
【问题描述】:

我正在编写一个本机 C/C++ .dll 程序,该程序调用许多第三方 C/C++ 库的 .dll 函数,并返回一个 18 列、0-n 行的 c/c++ 结构数组 (SA)。然后,这个返回值被 WCF C# Web 服务程序捕获,该程序与我的 .dll 进行“互操作”,并使用 .net xml 库在将消息发送到 Web 服务客户端之前序列化结果。

我可以在这里看到开销:(a) 在 C/C++ 中准备数据以在返回之前填充 SA,(b) 一旦 C# Web 服务程序接收到该 SA,就将该 SA 序列化为 XML。

为了避免这种开销,我认为与其在我的 C/C++ dll 中填充 SA,不如填充到 XML 序列化的字符串或文件中,然后将此结果返回给 C# Web 服务程序,该程序只会发送已经将数据直接序列化到客户端。

此时我想知道:

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

2) 如果是,除了将数据填充到 XML 中之外,我还想包括 - 作为标题 - 列的名称、长度和数据类型。有人说我应该创建一个 XSD 字符串/文件来描述该标头。您对此有何看法?

3) 我应该在 C# 程序中考虑哪些事项才能避免返回 XML 数据出现问题? XSD 数据?

感谢您阅读本文。

【问题讨论】:

    标签: c# c++ xml wcf xsd


    【解决方案1】:

    XSD(XML Schema)主要用于验证和描述 XML 格式。根据我的经验,这不是您通常会传递的东西,通常端点已经拥有 Schema。如果您可以控制这两个应用程序(我假设您这样做),您可以省略它而只使用 XML。

    但是,如果您出于某种原因不信任它,您可以在 C# 代码中使用 Schema 并从 C++ 部分验证 XML。此外,如果您打算将此 XML 交给第三方,那么架构也很有用。

    您可能遇到的问题是字符编码。当您将 XML 传递给客户端时,您需要确保您的 XML 是 utf-8(或者如果您在 XML 声明中相应地设置了编码属性,但 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>
    

    【讨论】:

      猜你喜欢
      • 2014-06-02
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      • 2015-06-07
      • 2020-03-23
      • 1970-01-01
      • 2018-11-07
      相关资源
      最近更新 更多