0

我需要一种使用 linq to xml 从数据库表中读取姓名和电子邮件地址列表的方法。在我将列表生成为 xml 字符串后,我需要一种方法来循环遍历列表,按人员(节点),并将 xslt 应用于生成的 xml 子字符串,生成 html,并使用生成的 html 发送给人员(s ) 作为电子邮件。例如,我正在考虑以下 xml 布局: <persons> <person> <firstname> <middlename> <lastname> <emailaddress> </person> </persons>

在此示例中,我将不得不以某种方式像 for 循环一样遍历 xml 并访问每个人节点,从<person> .. </person>其中获取节点并一次转换这个节点。

在某些情况下,我还需要打印所有生成的字母。

我将如何以这种方式遍历 xml 并从那里的 person 节点进行转换?看来我需要<person> .. </person>字符串格式。

4

1 回答 1

0

为什么不直接使用 Serializable Person 类?C# 提供 XML 序列化支持。只要来自服务器的原始文本采用正确的 XML 格式,您就可以通过将其转储到 XML 文件中然后依赖内置的 C# 支持来规避大量工作。或者通过使用 LINQ 将数据库映射到类。

我当然不熟悉 LINQ,但本文提供了一种非常清晰的方法来使用 LINQ 将数据库映射到类,这将为您提供一种生成 XML 文件并使用内置序列化器、反序列化器和XSL 转换对数据做任何你喜欢的事情。

XmlSerializer s = new XmlSerializer(typeof(Person[]));
people = (Person[])s.Deserialize(file); // Serialize is almost identical
file.close();

将为您提供一种将 XML 从文件加载到 C# 类的简单方法(或者只是 LINQ 将 SQL 连接到类)。您可以使用内置的 XLST 支持来获取 XML 文件并使用 XSL 样式表对其进行转换:

XPathDocument x = new XPathDocument(xmlFile);
XslCompiledTransform xsl = new XslCompiledTransform();
xsl.Load(xslStyleSheet);
XmlTextWriter writer = new XmlTextWriter("result.html", null);
xsl.Transform(x, null, writer);

应该注意这一点 - 从这个答案。我敢肯定有一些方法可以用原始字符串做到这一点,但除非你真的必须这样做,否则何必呢?

于 2012-11-28T22:16:25.793 回答