不能使用带有空命名空间的前缀

时间:2012-05-29 09:36:57

标签: c# xml namespaces

我正在用c#创建一个XML文档。

它现在全部聚集在一起,但由于某种原因,我一直都会遇到错误。

这是我的代码:

  FileStream Slide2XmlStream = new FileStream(slide2Xml, FileMode.Create, FileAccess.Write);
        XmlWriter slide2XmlWriter = null;

        try
        {
            XmlWriterSettings contentTypesSettings = new XmlWriterSettings();
            contentTypesSettings.Indent = true;
            slide2XmlWriter = XmlWriter.Create(Slide2XmlStream, contentTypesSettings);

            slide2XmlWriter.WriteStartDocument(true);
            slide2XmlWriter.WriteStartElement( "p", "sld","http://schemas.openxmlformats.org/presentationml/2006/main" );
            slide2XmlWriter.WriteAttributeString("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
            slide2XmlWriter.WriteAttributeString( "a","http://schemas.openxmlformats.org/drawingml/2006/main");

            slide2XmlWriter.WriteStartElement( "p", "cSld", null);

            slide2XmlWriter.WriteStartElement( "p", "spTree", null );
            slide2XmlWriter.WriteStartElement( "p", "nvGrpSpPr", null );
            slide2XmlWriter.WriteStartElement( "p", "cNvpr", null );
            slide2XmlWriter.WriteAttributeString("name", "");
            slide2XmlWriter.WriteAttributeString("id", "1");
            slide2XmlWriter.WriteEndElement();

            slide2XmlWriter.WriteStartElement( "p", "cNvGrpSpPr", null );
            slide2XmlWriter.WriteEndElement();

            slide2XmlWriter.WriteStartElement( "p", "nvPr", null );
            slide2XmlWriter.WriteEndElement();
            slide2XmlWriter.WriteEndElement();

            slide2XmlWriter.WriteStartElement( "p", "grpSpPr", null );
            slide2XmlWriter.WriteStartElement( "a", "xfrm", null );
            slide2XmlWriter.WriteStartElement( "a", "off", null );
            slide2XmlWriter.WriteAttributeString("y", "0");
            slide2XmlWriter.WriteAttributeString("x", "0");
            slide2XmlWriter.WriteEndElement();

错误一直出现在方法开头的“a”前缀上。 任何帮助都将真正得到应用。

2 个答案:

答案 0 :(得分:1)

在XML中,元素可以在命名空间中,也可以不在(它被认为是后向考虑模式,有时也称为“空命名空间”)。如果您希望它在null命名空间中,这是您在方法的 end 附近请求的,那么您就不能请求命名空间前缀。无法将名称空间前缀绑定到“null名称空间”。

反过来是可能的。可能没有前缀,元素可能位于命名空间(默认命名空间)中,也不位于命名空间( null 命名空间)中。这取决于序列化XML文档中是否存在xmlns属性。

答案 1 :(得分:0)

我已经修好了。我需要允许xmlns前缀并允许字符串值为null:

slide2XmlWriter.WriteAttributeString("的xmlns""",NULL," HTTP://schemas.openxmlformats.org/drawingml/2006/main") ;