我正在努力理解 XSLT 转换。目前我收到一个 XML 格式的序列化对象,然后应用 XSLT 并将新的 XML 发送回程序。但现在我需要消除 XSLT 步骤并在程序内部进行转换。问题是我第二次看到 XSLT 表。转换表看起来很简单,但我仍然无法理解那里发生了什么。
<?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 的情况下在集合之间移动对象(如果这是正在发生的事情)。有人可以帮我吗?