我正在努力理解XSLT轉換。目前,我收到一個XML格式的序列化對象,然後應用XSLT並將新的XML發送回該程序。但是現在我需要消除XSLT步驟並在程序中進行內部轉換。問題是我第二次見過XSLT表。轉換表看起來非常簡單,但我仍然無法忽略那裏正在發生的事情。將XSLT轉換爲C#
<?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>
據我瞭解,從數據/標記,並且數據/ FlaggedDetails東西被複制到數據/系統/的RArray,我不能把這種邏輯爲C#。我不得不消除序列化詞彙表,因此我在不使用XSLT的情況下在集合之間移動對象(如果發生了這種情況)。有人可以幫助我嗎?
謝謝!事情是我必須做到這一點,而不用XSLT來消除序列化步驟。所以我必須做同樣的XSLT,即在C#中將對象從一個地方移動到另一個地方,但我不明白髮生了什麼。 –