我在为我的网站构建一个模板引擎。我正在使用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