通过 LINQ to XML 在 XDocument 文件中的标记内创建"text<tag />text<tag />"内容



我正在使用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"));

最新更新