使用c#创建XML

时间:2010-01-27 14:34:17

标签: c# xml

首先,这是我的代码。

IEnumerable<XElement> targetDirectory =
    from XElement e in workingXmlDocument.Descendants(wixNS + "Directory")
    where e.Attribute("Id").Value == "TARGETDIR"
    select e;
foreach (var now in targetDirectory)
{
    now.Add(XElement.Parse("<Directory Id='" + fileVariable.Directory.Name 
                                             + @"' />"));
}

这是我想要做的。我试图搜索具有值为TARGETDIR的属性Id的每个Directory元素。然后我将一个新的目录元素放在一个名为文件目录的目录中。就是这样。问题是它只是将所有目录放在一行中(没有换行符,没有缩进,没有,只有原始数据),并且它包含一个包含每个元素的空白xmlns标记。我如何告诉它每个元素应该在XML文档中拥有它自己的行,如何告诉它使用与文档其余部分相同的命名空间?我知道我可以明确告诉它它应该有一个带有正确NS的xmlns属性,但这是我想要做的最后一件事。想法?

更新 - XML Writer的代码

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.NewLineHandling = NewLineHandling.Entitize;

using (XmlWriter currentWriter = XmlWriter.Create(filePath, settings))
{
     workingXmlDocument.WriteTo(currentWriter);
     currentWriter.Flush();
} // using (XmlWriter xw = XmlWriter.Create(FilePath))

从这里开始,它不会向上面代码中包含的元素添加新行。

1 个答案:

答案 0 :(得分:2)

我会按如下方式编写循环,提供命名空间。这应该根据需要创建节点。

foreach (var now in targetDirectory)
{
    now.Add(new XElement(
        wixNS + "Directory",
        new XAttribute("Id", fileVariable.Directory.Name));
}

我在此假设wixNSXNamespace的一个实例,例如:

XNamespace wixNS = "http://schemas.microsoft.com/wix/2003/01/wi";

我不确定为什么缩进不起作用。