2

我正在用 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”前缀上。任何帮助都会得到真正的赞赏。

4

3 回答 3

1

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

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

于 2012-05-29T09:52:02.190 回答
1

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

slide2XmlWriter.WriteAttributeString("xmlns","a",null,"http://schemas.openxmlformats.org/drawingml/2006/main");
于 2012-05-29T09:55:23.027 回答
0

如果您正在使用XmlSerializer并且遇到此异常,请确保您的类中没有任何ShouldSerializeXXX用于 xml 属性的方法。

例如,不要这样做:

[XmlRoot(ElementName = "Foo")]
public class Foo
{
    [XmlAttribute(AttributeName = "Bar")]
    public string Bar{ get; set; }
    
    public bool ShouldSerializeBar(){ return true; }
}
于 2022-02-16T15:17:25.753 回答