我在爲我的網站構建一個模板引擎。我正在使用ASP.NET MVC和Linq-to-SQL。有沒有一種將LINQ-to-SQL數據轉換爲XML的有效方法?
所以,
什麼我想要做的是產生這樣的XML文檔:
<?xml version="1.0" encoding="utf-8" ?>
<MainPage>
<MainPageHtml><![CDATA[<p>lol!</p><br/>wtf? totally!]]></MainPageHtml>
<Roles>
<Role RoleId="1">User</Role>
<Role RoleId="2">Administrator</Role>
</Roles>
</MainPage>
而且用XSLT轉換它像這樣:
<?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" encoding="iso8859-1" omit-xml-declaration="yes"/><xsl:template match="/">
<xsl:value-of select="/MainPage/MainPageHtml"/>
<![CDATA[<select>]]><xsl:for-each select="//Roles/Role">
<![CDATA[<option value="]]><xsl:value-of select="@RoleId"/><![CDATA[">]]><xsl:value-of select="."/><![CDATA[</option>]]></xsl:for-each>
<![CDATA[</select>]]></xsl:template>
</xsl:stylesheet>
使用此類代碼:
XmlDocument data = new XmlDocument(); data.Load("Data.xml");
XslCompiledTransform transform = new XslCompiledTransform(); transform.Load("Transform.xslt");
StringWriter sw = new StringWriter();
transform.Transform(data, null, sw);
Console.WriteLine(sw.ToString());
Console.ReadKey(true);
是否有一個快速的方法來把這樣一個LINQ基於模型:
return View("MainPage", new MainPageModel
{
MainPageHtml = Config.MainPageHtml,
Roles = Config.GetAllRoles()
});
向上面的模型?
代碼喜歡你的第一個片段應僅用於診斷或原型設計,因爲如果輸入包含字符(例如< or >),它將創建無效的XML。使用XmlDocument,XmlWriter或XDocument APIs會更安全,因爲它們可以確保事情能夠正確地轉義。 – itowlson 2009-09-26 01:43:29
在構建XML以補充任何< >或控制字符時,我使用SafeXML方法(爲簡潔起見未顯示)。使用XDocument API對我來說很笨拙,並且不會讓您直觀地感覺到生成的XML會是什麼。 – sipwiz 2009-09-26 01:54:34
我不需要很好的感覺,因爲XML是中間步驟。我實際上正在尋找一種不首先序列化的方法。我希望它保持爲DOM。 (我認爲我表現出的方式可能會這樣做。) – 2009-09-26 03:22:09