1

新しい既定の名前空間が定義されている要素を含む既存の XmlDocument を書き直しています (下記の assemblyBinding 要素を参照)。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <legacyCasPolicy enabled="true" />
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    </assemblyBinding>
  </runtime>
</configuration>

名前空間を再修飾することなく、この「assemblyBinding」要素に新しいノードを追加できるようにする必要があります (結果のファイルを app.config ファイルとして扱うときに、.net ランタイムが Xml を無効と見なすため)。

これは私が欲しいものです:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <legacyCasPolicy enabled="true" />
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

      <dependentAssembly>
        <assemblyIdentity name="Dependency" publicKeyToken="9f10d5ba1865867c"/>
      </dependentAssembly>

    </assemblyBinding>
  </runtime>
</configuration>

...「dependentAssembly」要素は、その親の名前空間を継承します。

XmlDocument.CreateElement("dependentAssembly"); を呼び出した後。または XmlDocument.CreateElement("dependentAssembly", "urn:schemas-microsoft-com:asm.v1"); または XmlDocument.CreateElement("asm", "dependentAssembly", "urn:schemas-microsoft-com:asm.v1");

私はこのようなものを取得し続けます...

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <legacyCasPolicy enabled="true" />
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

      <asm:dependentAssembly xmlns:asm="urn:schemas-microsoft-com:asm.v1">
        <asm:assemblyIdentity name="Dependency" publicKeyToken="9f10d5ba1865867c"  xmlns:asm="urn:schemas-microsoft-com:asm.v1"/>
      </asm:dependentAssembly>

    </assemblyBinding>
  </runtime>
</configuration>

欲しいものを手に入れるにはどうすればいいですか?

4

3 に答える 3

0

.NET 3.5を使用している場合は、LINQtoXMLを使用できます。たとえば、次のコードは次のとおりです。

XNamespace ns = "uri:ns";
XDocument doc = new XDocument
    (new XElement("root",
                  new XElement(ns + "child", new XAttribute("xmlns", ns),
                               new XElement(ns + "grandchild"))));
doc.Save("test.xml");

このXMLの結果:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <child xmlns="uri:ns">
    <grandchild />
  </child>
</root>

で同じ結果を取得しようとしXmlDocumentましたが、これまでのところ失敗しました...

于 2009-06-30T06:07:49.833 に答える
0

ドキュメント内の XPathNavigator で AppendChildElement を使用してみましたが、この方法で複数の名前空間宣言を追加していないようです (この例では、必要なすべての要素が追加されていませんが、アイデアは得られます)。

        XmlDocument doc = new XmlDocument();
        doc.LoadXml(
            @"<?xml version='1.0' encoding='utf-8' ?>
                <configuration>
                  <runtime>
                    <legacyCasPolicy enabled='true' />
                    <assemblyBinding xmlns='urn:schemas-microsoft-com:asm.v1'>
                    </assemblyBinding>
                  </runtime>
                </configuration>
             ");       
        NameTable nt = new NameTable();
        XmlNamespaceManager nsm = new XmlNamespaceManager(nt);
        nsm.AddNamespace("x", "urn:schemas-microsoft-com:asm.v1");

        XPathNavigator node = doc.CreateNavigator().SelectSingleNode("//x:assemblyBinding", nsm);
        node.AppendChildElement("", "dependentAssembly", "urn:schemas-microsoft-com:asm.v1", "");

フレッド

于 2009-11-06T00:41:43.397 に答える