创建&#34;文本<tag> text <tag>&#34;通过LINQ to XML </tag> </tag>在XDocument文件中的标记内容

时间:2015-03-09 08:26:15

标签: c# html xml reflection linq-to-xml

我正在使用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)吗?

1 个答案:

答案 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"));