私はデータがさまざまな XML 形式で配信されるものに取り組んでおり、それを解析する方法のほとんどの部分を理解することはできますが、XSLT と XPath について十分に理解していないため、このタイプの複数の形式をどこからまとめればよいかを知ることができません。一部のデータは明らかに検索され、一部のデータは繰り返され、一部のデータは名前を変更する必要があり、一部のデータは属性にあり、一部は値にあり、テンプレートはおそらく特定の順序で処理するか、変数で呼び出す必要があります。このタイプの例はここにはないと思います。もし入手できれば、人々の多くの問題を解決できるかもしれません。
目標は、同様のデータをさまざまな形式で提供する複数のソースから入力を取得し、それらを共通の XML 形式に変換して、現在維持しなければならない 4 つのプログラム処理パスではなく、1 つのプログラム処理パスのみを記述することです。また、翻訳は簡単にデシリアライズできる必要があります。
いずれにせよ、これは INPUT ファイルの公正な例です。
<?xml version="1.0" encoding="utf-8"?>
<PackageName TransmissionID="0792d49a-c09b-4094-9f4e-2357a042865c">
<Version>1.0</Version>
<DateReported>04/12/2010</DateReported>
<TimeReported>10:16:46.9385105</TimeReported>
<!-- Status=Disposition -->
<ReportPackage Status="Disposition1">
<Addresses>
<Address>
<!-- PersonAddress -->
<Name>Stephen Stipulate</Name>
<Address>1200 Any Street</Address>
<City>Some City</City>
<State>XX</State>
<Zip>12345</Zip>
<Phone>800-555-1212</Phone>
</Address>
</Addresses>
<Parts packageID="APackageId">
<packageClientAccount>00000000</packageClientAccount>
<DiscardedIdentifier id="NothingOfInterest">
<AssemblyId>
<IdValue>0547224801-0908</IdValue>
</AssemblyId>
<!-- Status -->
<AssemblyStatus>
<Status>OutOfStock</Status>
<DateReOrderReceived>2009-09-24T06:09:00</DateReOrderReceived>
</AssemblyStatus>
<PartVendor>
<!-- VendorAddress -->
<VendorName>Roger Refactor</VendorName>
<VendorAddress>
<IdValue name="Address">100 An Avenue Suite 13</IdValue>
<IdValue name="City">A Different City</IdValue>
<IdValue name="State">YY</IdValue>
<IdValue name="Zip">54321</IdValue>
<IdValue name="Phone">866-555-1212</IdValue>
</VendorAddress>
</PartVendor>
<PartsMainSegment>
<AdditionalSegment>
<PartSpecs>
<Spec>
<PartId>123456</PartId>
<Name>Widget1</Name>
<ThresholdLevel>000500</ThresholdLevel>
</Spec>
<Spec>
<PartId>234567</PartId>
<Name>Widget2</Name>
<ThresholdLevel>000200</ThresholdLevel>
</Spec>
</PartSpecs>
</AdditionalSegment>
</PartsMainSegment>
<AdditionallPartsSegment>
<Spec>
<PartId>123456</PartId>
<PartType>ABC</PartType>
</Spec>
<Spec>
<PartId>234567</PartId>
<PartType>CBA</PartType>
</Spec>
</AdditionallPartsSegment>
<AdditionalItems type="RawData" qualifier="mode" vendor="rogerRefactor">
<Text>AModeValue</Text>
</AdditionalItems>
<AdditionalItems type="RawData" qualifier="indicator" vendor="rogerRefactor">
<Text>AnIndicator</Text>
</AdditionalItems>
</DiscardedIdentifier>
</Parts>
</ReportPackage>
</PackageName>
そして、目的の OUTPUT ファイル:
<?xml version="1.0" encoding="utf-8"?>
<Package>
<TransmissionID>0792d49a-c09b-4094-9f4e-2357a042865c</TransmissionID>
<PackageType>PackageName</PackageType>
<Version>1.0</Version>
<DateReported>1/03/2011</DateReported>
<TimeReported>16:25:35.1293170</TimeReported>
<Disposition>Disposition1</Disposition>>
<packageID>APackageId</packageID>
<packageClientAccount>00000000</packageClientAccount>
<Addresses>
<PersonAddress>
<Name>Stephen Stipulate</Name>
<Address>1200 Any Street</Address>
<City>Some City</City>
<State>XX</State>
<Zip>12345</Zip>
<Phone>800-555-1212</Phone>
</PersonAddress>
<VendorAddress>
<Name>Roger Refactor</Name>
<Address>100 An Avenue Suite 13</Address>
<City>A Different City</City>
<State>YY</State>
<Zip>54321</Zip>
<Phone>866-555-1212</Phone>
</VendorAddress>
</Addresses>
<Parts>
<AssemblyId id="0547224801-0908">
<Status>OutOfStock</Status>
<DateReOrderReceived>2009-09-24T06:09:00</DateReOrderReceived>
<Part>
<PartId>123456</PartId>
<PartName>Widget1</PartName>
<Level>000500</Level>
<PartType>ABC</PartType>
</Part>
<Part>
<PartId>234567</PartId>
<PartNameName>Widget2</PartNameName>
<Level>000200</Level>
<PartType>CBA</PartType>
</Part>
</AssemblyId>
</Parts>
<AdditionalData>
<Vendor>TheVendor</Vendor>
<Mode>AModeValue</Mode>
<Indicator>AnIndicator</Indicator>
</AdditionalData>
</Package>
実際に、このレポートに似た XML を Web サービスに取得します。必要な名前の変更、ツリーのさまざまな部分へのデータの移動、および特に、親子関係を持たない部分レコードのリストを作成するために結合する必要があるさまざまなセグメントに注意してください。私は単に処理を順序付ける方法を理解していないため、どこから始めればよいか途方に暮れているので、悪い開始の試みを提供していません.わざと、私をばかみたいに見せます!:)
ありとあらゆる助けに感謝します-乾杯!:)