6

次のコードを使用して XmlDocument を初期化しています

XmlDocument moDocument = new XmlDocument();
moDocument.AppendChild(moDocument.CreateXmlDeclaration("1.0", "UTF-8", null));
moDocument.AppendChild(moDocument.CreateElement("kml", "http://www.opengis.net/kml/2.2"));

プロセスの後半で、次のコードを使用していくつかの値を書き込みます

using (XmlWriter oWriter = oDocument.DocumentElement.CreateNavigator().AppendChild())
{
  oWriter.WriteStartElement("Placemark");
  //....
  oWriter.WriteEndElement();
  oWriter.Flush();
}

ドキュメントを保存すると、最終的に次のxmlが表示されます

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Placemark xmlns="">
    <!-- -->   
  </Placemark>
</kml>

Placemark 要素の空の xmlns を取り除くにはどうすればよいですか?

-- PLACEMARK の書き込み方法の変更を表示するように編集 -- Placemark
の書き込みに名前空間を配置すると、ドキュメントに要素が追加されません。

4

6 に答える 6

3

次のコードを使用してドキュメントを作成することで問題を修正しました (ドキュメント要素に名前空間はありません)。

XmlDocument moDocument = new XmlDocument(); 
moDocument.AppendChild(moDocument.CreateXmlDeclaration("1.0", "UTF-8", null)); 
moDocument.AppendChild(moDocument.CreateElement("kml"));

そして、次のコードで保存して、保存前に名前空間を設定します

moDocument.DocumentElement.SetAttribute("xmlns", msNamespace);
moDocument.Save(msFilePath);

namespace は保存された xml ファイルでのみ必要なため、これは有効です。

于 2010-07-13T09:32:47.137 に答える
1

これは古い投稿ですが、将来の悪い習慣を防ぐためです。XML ドキュメントでxmlns名前空間を宣言しないでください。そのため、XmlDocument が行うべきではないことを行っているため、空のノードが取得される原因になる可能性があります。

接頭辞 xmlns は名前空間バインディングを宣言するためにのみ使用され、定義により名前空間名http://www.w3.org/2000/xmlns/にバインドされます。宣言してはなりません。他のプレフィックスをこの名前空間名にバインドしてはならず、デフォルトの名前空間として宣言してはなりません。要素名にプレフィックス xmlns を付けてはなりません。

ソース: http://www.w3.org/TR/REC-xml-names/#ns-decl

于 2012-04-25T09:03:58.980 に答える
0

oWriter.WriteStartElement("Placemark");親ノードにはすでに適切な名前空間があるため、動作するはずです。

于 2010-07-13T09:03:50.193 に答える
0

試しましたか:

oWriter.WriteStartElement("kml", "Placemark", "kml");
于 2010-07-13T09:15:53.553 に答える
0

あなたが必要

oWriter.WriteStartElement("Placemark", "http://www.opengis.net/kml/2.2");

それ以外の場合、Placemark 要素は null 名前空間に配置されます。これがxmlns=""、XML をシリアル化するときに属性が追加される理由です。

于 2010-07-13T12:48:00.743 に答える