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 に答える