DataSet Merge без схемы никогда не переопределяет данные, верно? - PullRequest
1 голос
/ 30 июня 2011

Я работаю с существующим кодом и надеюсь изменить данные без перекомпиляции (как таковая это может рассматриваться как проблема SuperUser)) основанный на ресурсах файл XML.Затем мы проверяем локальный XML-файл и, если он есть, DataSet.ReadXml этот файл, а затем DataSet.Merge результат в оригинал.внешний XML не может переопределить какие-либо данные, только добавить к ним, да?

1 Ответ

0 голосов
/ 01 июля 2011

Возможно, заголовок моего вопроса исключает эту опцию, но он не предназначен:

Вы можете получить данные локального файла для переопределения скомпилированного файла, включив xs:schema в качестве первого подэлемента XML.

т.е. если исходные данные не имеют схемы, будет использоваться объединенная схема.

1010 * Е.Г. *

Оригинал:

<NewDataSet>
  <dt1>
    <k>1</k>
    <l>test</l>
    <m>1</m>
  </dt1>
  <dt1>
    <k>2</k>
    <l>test</l>
    <m>2</m>
  </dt1>
  <dt1>
    <k>2</k>
    <l>tst</l>
    <m>3</m>
  </dt1>
</NewDataSet>

Новое:

<NewDataSet>
 <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="dt1">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="k" type="xs:string" />
              <xs:element name="l" type="xs:string" />
              <xs:element name="m" type="xs:string" minOccurs="0" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
    <xs:unique name="Constraint1" msdata:PrimaryKey="true">
      <xs:selector xpath=".//dt1" />
      <xs:field xpath="k" />
      <xs:field xpath="l" />
    </xs:unique>
  </xs:element>
 </xs:schema>
  <dt1>
    <k>1</k>
    <l>test</l>
    <m>1</m>
  </dt1>
  <dt1>
    <k>2</k>
    <l>test</l>
    <m>3</m>
  </dt1>
  <dt1>
    <k>3</k>
    <l>test</l>
    <m>4</m>
  </dt1>
</NewDataSet>

Объединено (для простоты я включаю вывод WriteXml):

<NewDataSet>
  <dt1>
    <k>1</k>
    <l>test</l>
    <m>1</m>
  </dt1>
  <dt1>
    <k>2</k>
    <l>test</l>
    <m>3</m>
  </dt1>
  <dt1>
    <k>2</k>
    <l>tst</l>
    <m>3</m>
  </dt1>
  <dt1>
    <k>3</k>
    <l>test</l>
    <m>4</m>
  </dt1>
</NewDataSet>
...