0

我有一个带有以下内容的 xml 模板 (ReportTemplate.xml):

<Report xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns:cl="http://schemas.microsoft.com/sqlserver/reporting/2010/01/componentdefinition" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition">
  <ReportSections>
    <ReportSection>
      <Body>
        <ReportItems>
          <Tablix Name="Tablix1">
            <TablixBody>
              <TablixColumns>

              </TablixColumns>
              <TablixRows>

              </TablixRows>
            </TablixBody>
          </Tablix>
        </ReportItems>
      </Body>
    </ReportSection>
  </ReportSections>
</Report>

我创建了 xml 片段 (tablixrow.xml) 不是完全限定的 xml 文档

<TablixRow>
  <Height>0.26736in</Height>
</TablixRow>

在我的控制台应用程序中,我正在尝试加载这两个文件并将 tablixrow 代码块插入到父文档的 TablixRows 节点中

 private static XDocument GenerateReport(List<string>fieldnames)
        {           
            //load base template
            XDocument report = XDocument.Load("Templates/ReportTemplate.xml");
            XNamespace ns = report.Root.Name.Namespace;
            //load row template
            XDocument tRows = XDocument.Load("Templates/tablixrow.xml");
             //and here is where I am stuck


            return report;
        }

我是 linq 新手,我正在尝试了解如何导航到“TablixRows”节点,然后插入 tRows 代码块。

谁能提供一些参考点或例子。到目前为止,我所看到的总是导航到 ID。我不能在这个模式中使用 id,需要依赖节点

-干杯

4

1 回答 1

0
private static XDocument GenerateReport(List<string>fieldnames)
{
    XDocument report = XDocument.Load("Templates/ReportTemplate.xml");
    XNamespace ns = report.Root.Name.Namespace;
    XElement row = XElement.Load("Templates/tablixrow.xml");

    // change namespace for loaded xml elements
    foreach (var element in row.DescendantsAndSelf())
        element.Name = ns + element.Name.LocalName;

    var rows = xdoc.Descendants(ns + "TablixRows").Single();
    rows.Add(row);

    return report;
}

如果您不会更改行模板 xml 的命名空间,那么在添加到报告文档后它将具有默认命名空间(您不想要):

<TablixRows>
  <TablixRow xmlns="">
    <Height>0.26736in</Height>
  </TablixRow>
</TablixRows>

如果您的某些模板将具有属性,那么您还需要为属性提供命名空间。

于 2013-07-11T16:36:57.710 回答