0

我很难让它发挥作用。我有一个现有的 XML 文件,我只需将 xmlns="http://url.com/path_v1_0" 添加到现有标签(url.com 是任意的,我需要在其中放入其他内容) . 这需要在 C# 中。文件的其余部分需要保持原样,只需要添加 xmlns 部分。

这是我所拥有的一个片段:

<?xml version="1.0" encoding="utf-8"?>
<content>
  <block id="root">
    <identification>

这是我需要的一个片段:

<?xml version="1.0" encoding="utf-8"?>
<content xmlns="http://url.com/path_v1_0">
  <block id="root">
    <identification>
4

4 回答 4

1

好吧,冒着让 XML 狂热分子跳到我头上的风险,最简单的方法如下:

  TextReader myInputFile = new StreamReader("test.xml");
  TextWriter myOutputFile = new StreamWriter("newtest.xml");

  myOutputFile.WriteLine(myInputFile.ReadLine());
  myOutputFile.WriteLine("<content xmlns=\"http://url.com/path_v1_0\">");

  string line = myInputFile.ReadLine(); // Waste the original <content> line

  while ((line = myInputFile.ReadLine()) != null)
  {
    myOutputFile.WriteLine(line);
  }

  myInputFile.Close();
  myOutputFile.Close();

现在正如我所说,这绝对不是正确的 XML 标准方法,存在一些潜在的问题,其中至少是在添加新行时您很可能不会添加 UTF-8 格式的字符串。

然而,它可能是最快和最容易理解的,而不会被 .NET 现在提供的所有各种不同的 XML API 所束缚。

如果您想获得“正确”的方式,那么您需要查看 XDocument 和 XElement 的文档,使用一些 Linq to XML 和这些类中的各种方法,您可以非常轻松地将 XMLNS 标记添加到给定元素中然后保存 XML。

于 2012-04-30T15:37:29.503 回答
1

由于您正在处理由始终以某种格式输出 XML 的工具生成的 XML,因此您可能只需执行一些字符串操作即可:

var prefix = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<content>";

var xml = File.ReadAllText(pathToXmlFile);

if (!xml.StartsWith(prefix))
{
    throw new Exception("Wrong format");
}

xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" +
      "<content xmlns=\"http://url.com/path_v1_0\">" +
      xml.Substring(prefix.Length);

File.WriteAllText(pathToXmlFile, xml);
于 2012-04-30T15:17:03.470 回答
0

如果你愿意尝试 Linq2XML,这里有一个小例子:

XDocument doc = XDocument.Load("path/to/file.xml");
doc.Root.Attribute("xmlns").Value = "http://url.com/path_v1_0";

你需要一个

using System.Xml.Linq;

//编辑:我已经尝试使用已经具有 xmlns 属性的现有 XML 文件。所以 dtb 是对的。这是一个工作示例:

XDocument oldDoc = XDocument.Load(@"c:\logs\asd.xml");
XNamespace ns = "http://url.com/path_v1_0";
XElement newRoot = new XElement(ns + oldDoc.Root.Name.LocalName, oldDoc.Root.Descendants());
XDocument newDoc = new XDocument(newRoot);
于 2012-04-30T15:08:08.037 回答
0

使用此例程将命名空间设置为您的 xml

    public static void SetDefaultXmlNamespace(XElement element, XNamespace xmlns)
    {
        if (element.Name.NamespaceName == string.Empty)
            element.Name = xmlns + element.Name.LocalName;

        foreach (var e in element.Elements())
            SetDefaultXmlNamespace(element, xmlns);
    }

如下调用它

XDocument doc = XDocument.Load(xmlfilepath);
SetDefaultXmlNamespace(doc.Root, "http://url.com/path_v1_0");
于 2012-04-30T15:35:03.017 回答