2012-05-12 71 views
2

我們有一個從模式生成的xml文件,這些文件與我們共享,我們需要從xml文件生成c#代碼並設置其屬性。我可以創建一個解析器來執行此操作,但正在檢查是否有任何OOB解決方案。生成c#對象代碼並從xml文檔中爲其屬性賦值

例如

<Customer> 
<fname>tom</fname> 
<lname>jerry</lname> 
</Customer> 

Customer cust=new Customer(); 
fname="tom"; 
lname="jerry"; 

回答

3

我建議使用XSLT來創建你需要的代碼的輸出。

這個通用的樣式表將使用節點名稱爲類,並指定每個子節點與它的內容:當應用於

<?xml version="1.0" encoding="utf-8" ?> 
<Customer> 
    <fname>tom</fname> 
    <lname>jerry</lname> 
</Customer> 

會產生以下輸出

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" indent="no" /> 

    <xsl:variable name="newline" select="'&#xa;'" /> 

    <xsl:template match="/"> 
     <xsl:apply-templates /> 
    </xsl:template> 

    <xsl:template match="/node()[1]"> 
     <xsl:variable name="classname" select="local-name()" /> 

     <xsl:value-of select="concat($classname, ' cust=new ', $classname, '();', $newline)"/> 

     <xsl:for-each select="./*"> 
      <xsl:value-of select="concat(local-name(), '=&quot;', text(), '&quot;;', $newline)"/> 
     </xsl:for-each> 
    </xsl:template> 

</xsl:stylesheet> 

Customer cust=new Customer(); 
fname="tom"; 
lname="jerry"; 
+0

可能是我不清楚我的問題,我知道如何deseralize,但我想要的是如何生成e遵循xml文檔中的代碼。 Customer cc = new Customer() cc.fname =「tom」 – madhugilla

+1

確實不好。使用Xslt查看我的更新解決方案。 – Filburt