ある xml 形式から別の xml 形式に変換するために xslt を作成しました。
ソース ファイルには複数の「製造注文」と 1 つの「販売注文」があり、宛先にはすべての製造注文を保持する「販売注文」が 1 つしかありません。
これが私のソースxml形式です
<GenomicOrder>
<SalesOrder>
....
</SalesOrder>
<ProductionOrder>
....
</ProductionOrder>
<ProductionOrder>
....
</ProductionOrder>
<ProductionOrder>
....
</ProductionOrder>
</GenomicOrder>
私の宛先xml形式は以下のとおりです
<GenomicOrder>
<SalesOrder>
....
<ProductionOrder>
....
</ProductionOrder>
<ProductionOrder>
....
</ProductionOrder>
<ProductionOrder>
....
</ProductionOrder>
</SalesOrder>
</GenomicOrder>
私の逆シリアル化コードは次のとおりです
DataContractSerializer ser = new DataContractSerializer(typeof(SalesOrder));
FileStream fs =
new FileStream(
@"C:\realsample.xml",
FileMode.Open);
XmlDictionaryReader reader1 = XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas());
//Deserialize the data and read it from the instance.
SalesOrder parent = (SalesOrder)ser.ReadObject(reader1, true);
reader1.Close();
私の成功した販売注文 xslt 変換は以下のとおりです
<xsl:template match="/">
<SalesOrder>
<xsl:apply-templates select="GenomicOrder/SalesOrder"/>
<ProductionOrders>
<xsl:apply-templates select="GenomicOrder/ProductionOrder"/>
</ProductionOrders>
</SalesOrder>
</xsl:template>
SalesOrder.OrderId=1234; SalesOrder.ProductionOrder =null;
私の成功した製造オーダーの xslt 変換は次のとおりです。
<xsl:template match="/">
<SalesOrder>
<ProductionOrders>
<xsl:apply-templates select="GenomicOrder/ProductionOrder"/>
</ProductionOrders>
<xsl:apply-templates select="GenomicOrder/SalesOrder"/>
</SalesOrder>
</xsl:template>
SalesOrder.OrderId=null; SalesOrder.ProductionOrder.OrderRef = 12345;
すべてのオブジェクトを 1 回のパスで逆シリアル化するためにできる変更はありますか。「GenomicOrder/ProductionOrder」と「GenomicOrder/SalesOrder」の両方に変換を記述しました。