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を出力するツールによって生成された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 に答える
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のドキュメントを確認する必要があります。LinqtoXMLとこれらのクラスのさまざまなメソッドを使用すると、XMLNSタグを特定の要素に非常に簡単に追加できます。その後、XMLを保存します。

于 2012-04-30T15:37:29.503 に答える
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 に答える