Xmlns пространство имен переопределяет проблему + C # [дубликат]

Вызов printDocument(doc, System.out), где этот метод выглядит следующим образом:

public static void printDocument(Document doc, OutputStream out) throws IOException, TransformerException {
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer transformer = tf.newTransformer();
    transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
    transformer.setOutputProperty(OutputKeys.METHOD, "xml");
    transformer.setOutputProperty(OutputKeys.INDENT, "yes");
    transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
    transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");

    transformer.transform(new DOMSource(doc), 
         new StreamResult(new OutputStreamWriter(out, "UTF-8")));
}

(indent-amount является необязательным и может не работать с вашей конкретной конфигурацией)

6
задан pnuts 16 November 2015 в 23:40
поделиться

2 ответа

Я думаю, что это то, что вам нужно:

using System;
using System.Xml.Linq;

class Test
{
    static void Main()
    {
        XNamespace ns = "http://www.acme.com/ABC";
        DateTimeOffset date = new DateTimeOffset(2011, 9, 16, 10, 43, 54, 91,
                                                 TimeSpan.FromHours(1));
        XDocument doc = new XDocument(
            new XElement(ns + "ABC",
                         new XAttribute("xmlns", ns.NamespaceName),
                         new XAttribute(XNamespace.Xmlns + "xsi",
                              "http://www.w3.org/2001/XMLSchema-instance"),
                         new XAttribute("fileName", "acmeth.xml"),
                         new XAttribute("date", date),
                         new XAttribute("origin", "TEST"),
                         new XAttribute("ref", "XX_88888")));

        Console.WriteLine(doc); 
    }
}
19
ответ дан Jon Skeet 19 August 2018 в 06:39
поделиться
  • 1
    Необходим ли new XAttribute("xmlns", ns.NamespaceName)? Вы уже устанавливаете пространство имен по умолчанию в строке выше, нет? – spender 30 September 2011 в 01:25
  • 2
    @spender: Ну, мы устанавливаем пространство имен элемента - но мы явно не устанавливаем пространство имен default . Кажется, он работает без него в этом случае, но лично я предпочел бы быть явным. – Jon Skeet 30 September 2011 в 06:23
  • 3
    Большое спасибо, это сработало. – JMK 2 October 2011 в 16:29

Вы можете добавить объявления пространства имен в корневой элемент XmlDocument следующим образом:

document.DocumentElement.SetAttribute("xmlns", "http://default-namespace");
document.DocumentElement.SetAttribute("xmlns:ns2", "http://other-namespace");
5
ответ дан Elian Ebbing 19 August 2018 в 06:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: