Разбор XML в класс .Net - PullRequest
       2

Разбор XML в класс .Net

0 голосов
/ 17 ноября 2010

Я получил спецификацию для вызова веб-службы, которая выглядит следующим образом:

<?xml version="1.0" encoding="ISO-8859-1"?>
<methodResponse>
    <params>
        <param>
            <value>
                <array>
                    <data>
                        <value>
                            <struct>
                                <member>
                                    <name>OrderNumber</name>
                                    <value>
                                        <string>101</string>
                                    </value>
                                </member>
                                <member>
                                    <name>Created</name>
                                    <value>
                                        <string>2010-11-01 11:00:00</string>
                                    </value>
                                </member>
                                <member>
                                    <name>Rows</name>
                                    <value>
                                        <array>
                                            <data>
                                                <value>
                                                    <struct>
                                                        <member>
                                                            <name>ProductNumber</name>
                                                            <value>
                                                                <string>prod1</string>
                                                            </value>
                                                        </member>
                                                        <member>
                                                            <name>Title</name>
                                                            <value>
                                                                <string>Produkt 1</string>
                                                            </value>
                                                        </member>
                                                    </struct> 
                                                </value>

Это какой-то стандартный формат сериализации? (Думаю сервис написан на php)

Есть хорошие идеи, как извлечь информацию в класс .net?

Edit:

Я решил это с помощью преобразования xslt, которое создает более «нормальный» XML-файл

<Orders>
    <struct>
        <OrderNumber>101</OrderNumber>
        <Created>2010-11-01 11:00:00</Created>
        <Rows>
            <struct>
                <ProductNumber>prod1</ProductNumber>
                ...

Исходя из этого было легко создать схему и создать класс .net с помощью xsd.exe.

Преобразование выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                              xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" indent="yes"/>

<xsl:strip-space elements="*"/>
<xsl:preserve-space elements="struct"/>

<xsl:template match="/">
    <Orders>
      <xsl:apply-templates/>
    </Orders>
</xsl:template>

<xsl:template match="struct">
    <struct>
        <xsl:apply-templates/>
    </struct>
</xsl:template>

<xsl:template match="value/string|value/double">
    <xsl:value-of select="self::*"/>
</xsl:template>

<xsl:template match="//member">
    <xsl:element name="{name}">
        <xsl:apply-templates/>
    </xsl:element>
</xsl:template>

<xsl:template match="text()"/>
</xsl:stylesheet>

Ответы [ 2 ]

1 голос
/ 28 ноября 2010

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

Существует библиотека .Net доступна

1 голос
/ 17 ноября 2010

Это какой-то стандартный формат сериализации?

Очень надеюсь, что это ужасно.Заслуживает гласности в http://thedailywtf.com/

Есть хорошие идеи, как извлечь информацию в класс .net?

Предполагая, что образец неполный и реальная вещь действительнаXML, любой из .NET XML API сможет это сделать.(Сериализаторы XML, включая Data Contract, вряд ли будут работать без особых усилий по созданию типов-оболочек для всех дополнительных уровней элементов, видимых там.)

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

...