XMLを新しいXML形式に変換するためのアプローチ。オブジェクトを使用する場合、構成能力を制限しますか?

StackOverflow https://stackoverflow.com/questions/5843717

質問

XMLをある形式から別の形式に変換するアプローチに関する質問があります。

私は、制御できないオブジェクトからシリアル化されたデータを取得しているタスクに取り組んでいます。このXMLのオブジェクトを生成しました。これを「フォームインスタンス」と呼びましょう。フォームインスタンスは、ネストと、多くの無関係なレイアウトコンポーネントとネストが非常に複雑で、私の理解によりXSLTを使用するのが難しくなります。

フォームインスタンスを取得し、そこからプロパティを別のオブジェクトの値に割り当てる必要があります。他のオブジェクトを「標準形式」と呼びましょう。標準形式のオブジェクトは、最終的に到達する必要がある形式にシリアル化します。

フォームインスタンスは、フォームに記入するユーザーからの結果のシリアル化です。この形式の「定義」はいつでも変更でき、フォームにレイアウトの変更と同じくらい単純なものは、結果のシリアル化のネスト構造を完全に変更します - 一貫しているのは、シリアル化制御のどこかが私が値を必要とすることを表していることです - そして私は値が欲しいものを構成したい。

独自のXML「構成ファイル」を作成しています。これにより、最終的に「標準形式」オブジェクトにロードしたいフォームインスタンスのコントロールを指定できます。

フォームインスタンスは次のように構成されています:

<Form name="MainForm">
<Control type="GroupHeader">
<Control type="GroupHeader">
<Control type="text" name="FirstName"/>
<Control type="text" name="LastName"/>
</Control>
<Control type="Radio" name="Gender"/>
</Control>
<Control>
<Form name="SomeOtherSubForm">
<Control type="text" name="AnotherPersonFirstName"/>
<Control type="text" name="AnotherPersonLastName"/>
</Form>
</Control>
</Form>

ご覧のとおり、フォームインスタンスのフィールドが存在する場所は本当に気にしません(グループヘッダーを削除したり、新しいレイアウトを追加したりする場合はいつでも変更できます)。 「名前」を制御します。

「構成ファイル」を作成したいと思います。「Form Instance」にデータが追加されたときに、構成ファイルに調整を行うことができるという意味で十分に再利用できます。 「標準形式」に書き込むフォーム定義に追加されました。また、このファイルからも構成可能になりたい最終的な出力があります。

「標準形式」オブジェクトのシリアル化は、必要なものを取得します - 私が自分が終わらそうとしているものに固有の方法でそれを操作する場合(それは柔軟です)。しかし、フォームインスタンスデータの配置がそのオブジェクトにどのように構成できるかをどのように作成できるかを考えています。オブジェクトとして作業する場合、結果のシリアル化形式を変更する必要がある場合は、コードを変更する必要があります。

「標準形式」オブジェクト出力が何であるかを知っているので、「構成ファイル」にトークンのような構成セクションを作成して、形式の指定を可能にすることができると考えているのは間違っていますか?

たとえば、「フォームインスタンス」には、最終的に「標準形式」シリアル化に表現したいと思う少なくとも2つのフィールドがあります。これらの2つのフィールドは、誰かが定義されている基礎となるフォームの定義を変更した場合、いつでも「フォームインスタンス」シリアル化の位置/ネストを変更できます。

私たちの目的は、標準の形式オブジェクトを使用することではなく、シリアル化するもので終わることであるため、オブジェクトをカットして、必要なXMLに向かってモデル化することができます。たとえば、これは、「人」オブジェクトを追加した場合に標準形式が生成するものです。

<StandardFormat>
  <Person Gender="M">
    <Name>
      <First>Joe</First>
      <Last>Smith</Last>
    </Name>
  </Person>
</StandardFormat>

このようなXML構成ファイルを作成するのは大丈夫ですか:

<FormInstanceOutputConfiguration> 
  <Control id="FirstName" type="TextField">
  <Control id="LastName" type="TextField">
  <Control id="Gender" type="Radio">
  <CustomOutputTemplate>
    <Person Gender="[Gender]">
      <Name>
        <First>[FirstName]</First>
        <Last>[LastName]</Last>
      </Name>
    </Person>
  </CustomOutputTemplate>
</FormInstanceOutputConfiguration>

目的の出力は、変更が必要な「標準形式」モデルなしで変更できます。この場合の人が俳優と考えられていた場合、それは標準形式のオブジェクトで「」の下に行くことも、「」のような他のものの下にネストされる可能性があります。私は複数のフォームを持っていますが、各フォームのすべての「コントロール」には同じ出力があります。したがって、この場合、メインフォームには、同じ形式で出てくる必要があるさまざまな人がたくさんいます。

標準の形式オブジェクトを回避するのは悪いことですか?最終的に必要なのはシリアル化出力だけですか?

アイデアをありがとう。

役に立ちましたか?

解決

個人的には、XSLTはまだここであなたの最善の策だと思います。 XML変換には非常に用途が広いです。

データがオブジェクトベースの場合、XmlattributeOverRides(XmlSerializerにフィードできる)が必要なことを行うかどうかを確認できます。コード属性とは関係のないXMLマップを許可するため、同じモデルの並列マップが許可されますが、 いいえ XSLTスイープと同じくらいリッチ。また、XmlattrributeOverRidesを使用して作成されたXMLSerializerインスタンスをキャッシュして再利用するように注意する必要があります。そうしないと、回収不能な動的アセンブリが漏れます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top