我通过拨打另一个.net应用程序来获取我收到的整合产品xml。 Xml包含各种子产品的数据,如P1,P2,P3等。我需要编写一个C#程序来解析xml,然后将它分成三个独立的xmls..i.e.one,用于每个子产品P1,P2,P3 ......等。解析每个子产品的xml的业务规则(或标准)是不同的。
将来,输入xml还可能包含新的附加子产品P4,P5等的信息。 因此,我还需要将这个xml分解为这些新的子产品。
从模块设计的角度来看,子产品类型及其解析标准应该是可扩展和可配置的。这样,当需要处理新的子产品时,只需要更改配置,不需要更改代码必需的。
所以我在考虑以下方法。这听起来不错吗?
1.在数据库中添加一个名为T的新查找表。
2.添加3列:Id(int),Sub-ProductName(varchar),Criteria(varchar)
3.要在数据库中配置子产品说P1,该行可能如下所示:
pyq
此处,ProductType和ProductCategory是输入xml中的有效元素名称。
4.然后在C#程序中,使用反射处理Criterion列值并在输入xml上应用规则以获取相应子产品名称的xml,即P1 ..
感谢。
答案 0 :(得分:0)
最简单的方法是调用XSLT样式表(XSLT 2.0或更高版本,因此使用Saxon或XmlPrime)。
如果标准已修复,则样式表可以执行类似
的操作<xsl:transform....>
<xsl:template match="P1">
<xsl:result-document href="subproduct1.xml">
<xsl:copy-of select="."/>
</xsl:result-document>
</xsl:template>
<xsl:template match="P2">
<xsl:result-document href="subproduct2.xml">
<xsl:copy-of select="."/>
</xsl:result-document>
</xsl:template>
...
</xsl:transform>
如果在产品定义发生变化时更改此样式表感觉太像&#34;代码更改&#34;,那么您可以从产品结构的某个更高级别定义生成此样式表。 XSLT的一个好处是,作为XML,您可以编写一个XSLT样式表(称为元样式表)来生成XSLT样式表。这听起来并不奇怪;这是一种相当普遍的做法。