Использование двух пространств имен при определении нового XML-файла (XDocument, XElement, XAttribute) - PullRequest
1 голос
/ 22 апреля 2010
XNamespace xnRD = "http://schemas.microsoft.com/SQLServer/reporting/reportdesigner";
XNamespace xnNS = "http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition";

XAttribute xaRD = new XAttribute(XNamespace.Xmlns + "rd", xnRD);
XAttribute xaNS = new XAttribute("xmlns", xnNS);

XElement x =
                new XElement("Report", xaRD, xaNS,
                    new XElement("DataSources"),
                    new XElement("DataSets"),
                    new XElement("Body"),
                    new XElement("Width"),
                    new XElement("Page"),
                    new XElement("ReportID", xaRD),
                    new XElement("ReportUnitType", xaRD)
                );

XDocument doc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"));
doc.Add(x);
Console.WriteLine(doc.ToString());

Приводит к ошибке во время выполнения:

{"The prefix '' cannot be redefined from '' to 'http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition' within the same start element tag."}

То, что я пытаюсь сделать, это просто заставить DataSources и DataSets записывать в Debug.Console для создания ObjectDataSources, так как VS2010 пренебрегал добавлять их для ASPX.

EDIT:

                    new XElement(xaRD + "ReportID"),
                    new XElement(xaRD + "ReportUnitType")

Изменено и получено:

Additional information: The ':' character, hexadecimal value 0x3A, cannot be included in a name.

Вместо

Ответы [ 2 ]

0 голосов
/ 22 апреля 2010

            XNamespace xnRD = "<a href="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" rel="nofollow noreferrer">http://schemas.microsoft.com/SQLServer/reporting/reportdesigner</a>";
            XNamespace xnNS = "<a href="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition" rel="nofollow noreferrer">http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition</a>";</p>

<pre><code>        XDocument doc = new XDocument(
                new XDeclaration
                    (
                        "1.0",
                        "utf-8",
                        "yes"
                    ),
                    new XElement
                        (
                            xnNS + "Report",
                            new XAttribute(XNamespace.Xmlns + "rd", xnRD),
                            new XElement(xnNS + "DataSources"),
                            new XElement(xnNS + "DataSets"),
                            new XElement(xnNS + "Body"),
                            new XElement(xnNS + "Width"),
                            new XElement(xnNS + "Page"),
                            new XElement(xnRD + "ReportID"),
                            new XElement(xnRD + "ReportUnitType"))
                        );

0 голосов
/ 22 апреля 2010

Попробуйте это:

using System;
using System.Xml.Linq;

class Example
{
    static void Main()
    {
        XNamespace xnRD = "http://schemas.microsoft.com/SQLServer/reporting/reportdesigner";
        XNamespace xnNS = "http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition";

        XDocument doc = new XDocument(
                new XDeclaration("1.0", "utf-8", "yes"),
                    new XElement(xnNS + "Report",
                    new XAttribute(XNamespace.Xmlns + "rd", xnRD),
                        new XElement("DataSources"),
                        new XElement("DataSets"),
                        new XElement("Body"),
                        new XElement("Width"),
                        new XElement("Page"),
                        new XElement(xnRD + "ReportID"),
                        new XElement(xnRD + "ReportUnitType")));

        Console.WriteLine(doc.ToString());
    }
}
...