C# 将结构XML转换为平面XML(某些列除外)
我已经将一个SQLite数据库导出为结构化XML,然后在c#.net中使用以下代码将其转换为平面XML XML的结构如下所示C# 将结构XML转换为平面XML(某些列除外),c#,xml,sqlite,C#,Xml,Sqlite,我已经将一个SQLite数据库导出为结构化XML,然后在c#.net中使用以下代码将其转换为平面XML XML的结构如下所示 <apple> <id>1</id> <name>Apple 1</name> <orange> <id>5</id> <orangeNmae>C1</orangeNmae>
<apple>
<id>1</id>
<name>Apple 1</name>
<orange>
<id>5</id>
<orangeNmae>C1</orangeNmae>
<function>good for health</function>
<part>7</part>
<banana>
<id>9</id>
<bananaName>48</bananaName>
<effect>23</effect>
<notes>be careful</notes>
</banana>
<banana>
<id>10</id>
<bananaName>49</bananaName>
<effect>24</effect>
<notes>be careful!</notes>
</banana>
</orange>
</apple>
<apple id="1" name="Apple 1">
<orange id="5" orangeNmae="C1" function="good for health" part="7">
<banana id="9" bananaName="48" effect="23" notes="be careful" />
<banana id="10" bananaName="49" effect="24" notes="be careful" />
</orange>
</apple>
<apple id="1" name="Apple 1">
<orange id="5" orangeNmae="C1" function="good for health" part="7">
<banana id="9" bananaName="48" />
<notes>be careful</notes>
<effect>23</effect>
<banana id="10" bananaName="49" />
<notes>be careful</notes>
<effect>23</effect>
</orange>
</apple>
1.
苹果1
5.
C1
有益健康
7.
9
48
23
小心
10
49
24
小心!
生成的平面xml如下所示
<apple>
<id>1</id>
<name>Apple 1</name>
<orange>
<id>5</id>
<orangeNmae>C1</orangeNmae>
<function>good for health</function>
<part>7</part>
<banana>
<id>9</id>
<bananaName>48</bananaName>
<effect>23</effect>
<notes>be careful</notes>
</banana>
<banana>
<id>10</id>
<bananaName>49</bananaName>
<effect>24</effect>
<notes>be careful!</notes>
</banana>
</orange>
</apple>
<apple id="1" name="Apple 1">
<orange id="5" orangeNmae="C1" function="good for health" part="7">
<banana id="9" bananaName="48" effect="23" notes="be careful" />
<banana id="10" bananaName="49" effect="24" notes="be careful" />
</orange>
</apple>
<apple id="1" name="Apple 1">
<orange id="5" orangeNmae="C1" function="good for health" part="7">
<banana id="9" bananaName="48" />
<notes>be careful</notes>
<effect>23</effect>
<banana id="10" bananaName="49" />
<notes>be careful</notes>
<effect>23</effect>
</orange>
</apple>
现在我需要保留一些列,如结构化XML,如下所示
<apple>
<id>1</id>
<name>Apple 1</name>
<orange>
<id>5</id>
<orangeNmae>C1</orangeNmae>
<function>good for health</function>
<part>7</part>
<banana>
<id>9</id>
<bananaName>48</bananaName>
<effect>23</effect>
<notes>be careful</notes>
</banana>
<banana>
<id>10</id>
<bananaName>49</bananaName>
<effect>24</effect>
<notes>be careful!</notes>
</banana>
</orange>
</apple>
<apple id="1" name="Apple 1">
<orange id="5" orangeNmae="C1" function="good for health" part="7">
<banana id="9" bananaName="48" effect="23" notes="be careful" />
<banana id="10" bananaName="49" effect="24" notes="be careful" />
</orange>
</apple>
<apple id="1" name="Apple 1">
<orange id="5" orangeNmae="C1" function="good for health" part="7">
<banana id="9" bananaName="48" />
<notes>be careful</notes>
<effect>23</effect>
<banana id="10" bananaName="49" />
<notes>be careful</notes>
<effect>23</effect>
</orange>
</apple>
小心
23
小心
23
谁能告诉我怎么做吗?
在将结构化XML转换为平面XML时,是否应该改变方法?此XSLT为您进行转换。我使用模板匹配元素,并使用XSLT处理器的模式功能首先处理属性的转换,然后处理其他元素
<!-- elements to be transformed to attributes -->
<xsl:template match="*[not(text()[normalize-space()])]">
<xsl:element name="{name()}">
<xsl:apply-templates mode="attr"/>
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<!-- copy elements not handled as attribute -->
<xsl:template match="effect|notes">
<xsl:copy-of select="."/>
</xsl:template>
<!-- create attributes excluding certain elements -->
<xsl:template match="*[text()[normalize-space()] and not(self::effect | self::notes)]" mode="attr">
<xsl:attribute name="{name()}">
<xsl:value-of select="./text()"/>
</xsl:attribute>
</xsl:template>
<!-- surpress defaults -->
<xsl:template match="text()">
</xsl:template>
<xsl:template match="*|text()" mode="attr">
</xsl:template>
XSLT转换不是更适合这种情况吗?您能给我举个例子吗?有没有办法跳过转换为平面xml的一些列?