我试图将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>
答案 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>
没有不需要的命名空间信息。