附加XML文档时创建的默认名称空间

时间:2012-02-13 00:22:28

标签: c# xml

我试图将xml文件附加到现有文件中,一切正常,但是在附加时我的默认命名空间存在问题。

这是我用来附加的代码:

 XmlNode newChild = doc.CreateNode(XmlNodeType.Element, "image", "");
    newChild.Attributes.Append(doc.CreateAttribute("name", filename));

    XmlNode xmlElement = doc.CreateNode(XmlNodeType.Element, "width", null);
    xmlElement.InnerText = widthValue[1].TrimStart();
    newChild.AppendChild(xmlElement);

我得到的输出如下

<image d2p1:name="" xmlns:d2p1="test.jpg">
    <width>1024</width>
</image>

但我试图追加像:

<image name="test.jpg">
    <width>1024</width>
</image>

3 个答案:

答案 0 :(得分:3)

正如其他人所说,使用LINQ to XML可能会更容易。

但是,如果您想坚持使用XmlDocument来解决问题,请将代码更改为以下内容:

var attribute = doc.CreateAttribute("name");
attribute.Value = filename;
newChild.Attributes.Append(attribute);

您所拥有的代码存在的问题是doc.CreateAttribute("foo", "bar")在名称空间中使用URI foo创建名为bar的属性。那真的不是你想要的。

答案 1 :(得分:1)

我不知道您是否能够使用它,但您可以使用Linq To Xml进行如下操作:

// NOTE: Requires `using System.Xml.Linq;`
var newChild = new XElement("image");
newChild.Add(new XAttribute("name", filename));
doc.Add(newChild);

XElement xmlElement = new XElement("width");
xmlElement.Value = widthValue[1].TrimStart();
newChild.Add(xmlElement);

答案 2 :(得分:1)

你不能使用LINQ to XML来操作文件吗?

var xml = XDocument.Parse(@"<xml><image name=""first_image.jpg""><width>800</width></image></xml>");
xml.Root.Add(new XElement("image", new XAttribute("name", "test.jpg"), new XElement("width", "1024")));
var result = xml.ToString();

上面的代码产生以下结果:

<xml>
  <image name="first_image.jpg">
    <width>800</width>
  </image>
  <image name="test.jpg">
    <width>1024</width>
  </image>
</xml>

没有不需要的命名空间信息。