我正在使用XDocument
类和LINQ to XML来创建一些简单的HTML输出,我偶然发现了一个我似乎无法解决的问题。也许在使用 XML 时甚至根本不可能。
有一个包含很多属性的 POCO,其中一些属性是由约定命名的,因此我使用 Reflection 来迭代它们,如下所示:
List<string> propSuffixes = new List<string>();
for (int i=1; i<=20; i++)
{
propSuffixes.Add(i.ToString("D2")); // "01", "02", ..., "20"
}
XDocument xDoc = new XDocument(
new XElement("html",
new XElement("body",
propSuffixes
.Select(suffix =>
(string)typeof(MyPOCO)
.GetProperty("p" + suffix)
.GetValue(myPocoInstance))
.Select(v =>
new XElement("span", v, new XElement("br"))))));
这会将 20 个属性的字符串值与 <br />
标记一起放在它们自己的<span>
中。但是我希望"只是"没有跨度的字符串值,但仍然在每行末尾使用<br />
。也就是说,像这样:
<html>
<body>
propertyValue1<br />
propertyValue2<br />
...
propertyValue20<br />
</body>
</html>
这甚至可能吗,或者这是否违反了某些 XML 验证规则?如果可能,如何使用 LINQ 执行此操作?对我来说,困难在于必须将 2 个object
参数返回给 new XElement("body",...)
的参数,但我也不知道如何在<br />
参数之前传递该string
而不会引发一些错误。
您是否知道有什么方法可以实现我的目标,或者完成类似的布局(也许我可以使用<p>
而不是string
加<br />
)?
您可能无法在行尾获取<br />
,但您当然可以分解文本和标签,如下所示:
XElement root = new XElement("root");
root.Add(
new XText("Text"),
new XElement("tag"),
new XText("Text"),
new XElement("tag"),
new XText("Text"));