C # и десериализация XML: как насчет групп замещения, используемых для обработки глобализации - PullRequest
0 голосов
/ 28 декабря 2010

У меня есть следующая схема:

<xs:element name="Company" type="xs:string" />
<xs:element name="Companhia" substitutionGroup="Company"/>
<xs:element name="Société" substitutionGroup="Company"/>

<xs:complexType name="User">
  <xs:sequence>
    <xs:element minOccurs="0" maxOccurs="1" ref="Company" />
  </xs:sequence>
</xs:complexType>

Это позволяет мне успешно проверить следующие фрагменты XML:

<User>
  <Company>In English</Company>
</User>

и

<User>
  <Société>In French</Société>
</User>

I 'Я боюсь, что класс c #, сгенерированный xsd и соответствующим XMLSerializer, будет работать только с первым фрагментом XML.

По моему мнению, у меня есть 2 варианта:

  1. Использовать XSLT для обработкиXML-файл перед десериализацией, чтобы преобразовать имя элемента в английские.
  2. Написать собственный код десериализации.

Что вы думаете?Образцы будут высоко ценится.ТИА.

1 Ответ

0 голосов
/ 28 декабря 2010

Я бы порекомендовал вам использовать следующую структуру для сериализации / десериализации:

<User>
    <Company language="en">In English</Company>
</User>

и

<User>
    <Company language="fr">In French</Company>
</User>

Если ваш исходный XML не соответствует какой-либо фиксированной структуре, подобной этой, выможет использовать XSLT для его преобразования.

...