2010-11-17 2 views
0

я получил спецификацию для WebService вызова, который выглядит следующим образом:Синтаксический XML в .Net класса

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

TRWTF = формат XML? Там больше гнездятся, чем фактические данные. – delnan

+0

@delnan: Это может быть хуже, чем [Extensible XML] (http://thedailywtf.com/Articles/Extensible-XML.aspx) – Richard

ответ

1

Является ли это какой-то стандартный формат сериализации?

Я действительно надеюсь, что нет, это ужасно. Заявление о рекламе на http://thedailywtf.com/

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

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

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

+0

Спасибо. Есть ли у вас какие-либо предложения по использованию XML-API. Могу ли я как-то избежать глубокой вложенности кода, чтобы получить информацию? – adrianm

+0

@adrianm: Я бы хотел просмотреть несколько примеров, прежде чем делать выбор, но я бы, вероятно, либо предварительно обработал XSLT, чтобы удалить шум, либо посмотреть на XPath (то есть «XPathDocument' /' XPathNavigator'), чтобы выполнить извлечение. Однако мой первый приоритет состоял бы в том, чтобы попытаться понять, почему это генерируемый формат и посмотреть, генерируется ли что-то с меньшей структурой. – Richard

1

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

Существует библиотека .Net available

Смежные вопросы