Как записать строку лицензии XML (заканчивающуюся косой чертой '/') в C #? - PullRequest
0 голосов
/ 25 марта 2010

Я хочу написать файл XML, как показано ниже:

<?xml version="1.0" encoding="UTF-8"?>
<books xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <License licenseId="" licensePath="" />

Часть моего кода прикреплена здесь

    // Create a new file in D:\\ and set the encoding to UTF-8
    XmlTextWriter textWriter = new XmlTextWriter("D:\\books.xml", System.Text.Encoding.UTF8);

    // Format automatically
    textWriter.Formatting = Formatting.Indented;

    // Opens the document
    textWriter.WriteStartDocument();

    // Write the namespace declaration.
    textWriter.WriteStartElement("books", null);
    // Write the genre attribute.
    textWriter.WriteAttributeString("xmlns", "xsd", null, "http://www.w3.org/2001/XMLSchema");
    textWriter.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");

А теперь мне нужно написать строку лицензии ниже на C #

<License licenseId="" licensePath="" />

Но я не знаю, как двигаться дальше, потому что обнаружил, что Строка заканчивается косой чертой / .

Ответы [ 3 ]

2 голосов
/ 25 марта 2010

У меня есть 2 вопроса о том, как вы это делаете:

1 ) Вам нужно использовать текстовый редактор? Если у вас есть доступ к c # 3.0, вы можете использовать следующее:

XDocument doc = new XDocument(
    new XDeclaration("1.0", "utf-8", "yes"),
    new XAttribute(XNamespace.Xmlns + "xsd", "http://www.w3.org/2001/XMLSchema"),
    new XAttribute(XNamespace.Xmlns + "xsi", "http://www.w3.org/2001/XMLSchema-instance"),
    new XElement("Equipment",
        new XElement("License", 
            new XAttribute("licenseId", ""), 
            new XAttribute("licensePath", "")
        )
    )
);

2) Нужно ли объявлять два пространства имен? Мне кажется, что вы их не используете:

XDocument doc = new XDocument(
    new XDeclaration("1.0", "utf-8", "yes"),
    new XElement("Equipment",
        new XElement("License", 
            new XAttribute("licenseId", ""), 
            new XAttribute("licensePath", "")
        )
    )
);

Если вы намереваетесь записать в документ несколько элементов License, и у вас есть они в Array, List или каком-либо другом IEnumerable, вы можете использовать что-то похожее на код ниже, чтобы плюнуть их все вышло:

IEnumerable<LicenceObjects> licenses = //some code to make them;

XDocument doc = new XDocument(
    new XDeclaration("1.0", "utf-8", "yes"),
    new XElement("Equipment",
        licenses.Select(l => 
            new XElement("License", 
                new XAttribute("licenseId", l.licenseId), 
                new XAttribute("licensePath", l.licensePath)
            )
        )
    )
);

string xmlDocumentString = doc.ToString();

Конечно, если у вас нет .NET 3.0, то это бесполезно для вас: (

1 голос
/ 25 марта 2010

Почему бы вам просто не продолжить, как вы начали?

textWriter.WriteStartElement("Licence");
textWriter.WriteAttributeString("LicenseId", "");
textWriter.WriteAttributeString("LicensePath", "");

// Other stuff
textWriter.WriteEndDocument();
textWriter.Close();
1 голос
/ 25 марта 2010

Вызов метода WriteEndElement автоматически позаботится о добавлении косой черты вперед.

...