正确的设计方法:解析xml

时间:2017-09-20 01:24:36

标签: c# xml

我通过拨打另一个.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 ..

感谢。

1 个答案:

答案 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样式表。这听起来并不奇怪;这是一种相当普遍的做法。