私は新しいXMLファイルを作成するためにXMLにLinqを使用しています。ファイルの一部は、既存のXMLファイルから取得します。私はこれに次のコードを使用します。XElementがxmlnsを追加しました
var v2 = new XDocument(
new XDeclaration("1.0", "utf-16", ""),
new XComment(string.Format("Converted from version 1. Date: {0}", DateTime.Now)),
new XElement(ns + "keyem",
new XAttribute(XNamespace.Xmlns + "xsd", xsd.NamespaceName),
new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName),
new XAttribute(xsi + "schemaLocation", schemaLocation.NamespaceName),
new XAttribute("version", "2"),
new XAttribute("description", description),
new XElement(ns + "layout",
new XAttribute("type", type),
new XAttribute("height", height),
new XAttribute("width", width),
settings.Root) // XML from an existing file
問題は、xmlns = ""既存のファイルの最初の要素を追加することです。
結果は次のとおりです。私はこのようになりますから、読んでいるXMLファイル
<?xml version="1.0" encoding="utf-16"?>
<foo
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tempuri.org/KeyEmFileSchema.xsd KeyEmFileSchema.xsd"
xmlns="http://tempuri.org/KeyEmFileSchema.xsd">
<settings xmlns="">
...
</settings>
</foo>
、しかし、あなたが設定要素ので、これを見ている
<?xml version="1.0" encoding="utf-16"?>
<settings>
<colormaps>
<colormap color="Gray" textcolor="Black"/>
<colormap color="DarkGray" textcolor="White"/>
<colormap color="Black" textcolor="White"/>
<colormap color="Cyan" textcolor="Black"/>
</colormaps>
<macromaps>
<macromap pattern="^@([0-9A-F]{2})\|([0-9A-F]{2})$" replace="{ESC}$1{ESC}$2{MOUSERESET}"/>
<macromap pattern="^\$([0-9A-F]{2})\|([0-9A-F]{2})$" replace="{USERCLICK}{ESC}$1{ESC}$2{MOUSERESET}"/>
<macromap pattern="^\$([0-9A-F]{2})$" replace="{USERCLICK}{ESC}$1"/>
</macromaps>
<keydefault color="Cyan"/>
<groupdefault color="DarkGray"/>
</settings>
私はそれをどう理解していますか? 私は試しましたdefaultSettings.Name = ns + defaultSettings.Name.LocalName; しかし、私はそれをすべてのサブ要素について行う必要があります。もっと良いものでなければなりません。 – magol
Xslt技術を使用してドキュメントを変換するか、各要素を読み込んでコード内で変換する必要があります。基本的には、ロードしたXDocumentはその文書の各要素の名前空間を知っていて、fooと同じ名前空間ではないことを知っています。 –
読み込んだxmlファイルを正しい名前空間にするために変更することはできますか? – magol