我有一个mapper实用程序,它将输入XML节点映射到另一个节点(它不使用XSLT)。在运行时,它遍历XML节点并转换它。美化节点到节点转换器但效率不高,并且存在我们无法克服的性能障碍。好的部分是它编写了一个定义文件,列出了入站XML元素及其相应的转换名称。我想在.NET中编写一个工具,它将读取此定义文件并使用它自动生成XSLT。一旦它生成了XSLT,我就可以使用XSLTC对其进行编译,并在我的Web应用程序中使用反射来包含它以进行运行时转换。任何可以实现这一目标的想法,指导,建议或工具都非常感谢
以下是一个简化的示例
<order><order_id>12345</order_id><customer>Cust1</customer></order>
定义文件
[Header]
order=customer_order
[Fields]
order_id=order_number
customer=customer_number
工具使用定义文件运行转换,并在转换后生成以下xml
<customer_order><order_number>12345</order_number><customer_number>Cust1</customer_number></customer_order>
答案 0 :(得分:0)
有趣。从您的回复来看,并不完全清楚哪个部分很慢,但我同意XSLT可能会产生更快的结果,原因有两个。
XSLT方法将从身份模板(将一个XML复制到另一个)开始并构建,然后根据需要添加模板进行转换。您只需要完成规则并为每个规则创建。
这是示例身份模板,添加了3条规则。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- order=customer_order -->
<xsl:template match="order">
<customer_order><xsl:apply-templates select="@*|node()"/></customer_order>
</xsl:template>
<xsl:template match="order_id">
<order_number><xsl:apply-templates select="@*|node()"/></order_number>
</xsl:template>
<xsl:template match="customer">
<customer_number><xsl:apply-templates select="@*|node()"/></customer_number>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
结果XML
<?xml version="1.0"?>
<customer_order>
<order_number>12345</order_number>
<customer_number>Cust1</customer_number>
</customer_order>
祝你好运