我正在使用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个属性的字符串值与<span>
标记一起放在自己的<br />
中。但是我想要&#34;只是&#34;没有span的字符串值,但每行末尾仍然有<br />
。就是这样:
<html>
<body>
propertyValue1<br />
propertyValue2<br />
...
propertyValue20<br />
</body>
</html>
这甚至是可能的,还是针对某些XML验证规则?如果可能的话,我怎么能用LINQ做到这一点?对我来说困难在于必须将object
个参数返回new XElement("body",...)
的参数,但我也不知道如何在{{1}之前传递string
参数不会引起一些错误。
您知道有任何方法可以实现我的目标,或者可以实现类似的布局(也许我可以使用<br />
代替<p>
加string
)吗?
答案 0 :(得分:1)
您可能无法在该行的末尾获得<br />
,但您当然可以分解文本和标签,如下所示:
XElement root = new XElement("root");
root.Add(
new XText("Text"),
new XElement("tag"),
new XText("Text"),
new XElement("tag"),
new XText("Text"));