XSLT変換を理解するのに苦労しています。現在、XML形式でシリアル化されたオブジェクトを受け取り、XSLTを適用して、新しいXMLをプログラムに送り返します。しかし今、私はXSLTステップを排除し、プログラムの内部で変換を行う必要があります。問題は、XSLTシートを2回目にしたことです。変換シートは本当にシンプルに見えますが、それでもそこで何が起こっているのかを理解することはできません。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:t="http://tempuri.org/">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template name="CopyEverything" match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/t:Data/Flagged">
<xsl:element name="Flagged">
<xsl:apply-templates select="/t:Data/Covers/node()|@*"/>
</xsl:element>
</xsl:template>
<xsl:template match="/t:Data/FlaggedDetails">
<xsl:element name="FlaggedDetails">
<xsl:apply-templates select="/t:Data/TotalFlaggedDetails/node()|@*"/>
</xsl:element>
</xsl:template>
<xsl:template match="/t:Data/System/RArray">
<xsl:element name="{local-name()}">
<xsl:for-each select="/t:Data/System/RArray/Elem">
<xsl:call-template name="CopyEverything"/>
</xsl:for-each>
<xsl:for-each select="/t:Data/Elem/Elem">
<xsl:variable name="currentCode" select="Code" />
<xsl:variable name="showAlways" select="ShowAlways" />
<xsl:if test="count(/t:Data/System/RArray/Elem[Code=$currentCode])=0">
<xsl:call-template name="CopyEverything"/>
</xsl:if>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Data/Flaggedから何かを理解していてData/FlaggedDetailsがData/System / RArrayにコピーされている限り、このロジックをC#に変換することはできません。シリアル化のステムを削除する必要があるため、XSLTを使用せずにコレクション間でオブジェクトを移動します(これが行われている場合)。誰かがこれについて私を助けてもらえますか?