2017-06-27 10 views
1

XML文書を構築していて、一番上に名前空間を宣言しました。私は文字列から作成された要素には、appendChildしたい以下のいくつかの任意のレベルでC#xmlns = ""を使わずに文字列からXmlElementを作成する

<Root xmlns="http://www.omg.org/space/xtce" xmlns:xtce="http://www.omg.org/space/xtce" ...>

。私の目標は、xmlns AT ALLなしの要素を含む文書で終わることです。

これは、私は、最終的な文書に

<SomeElement name="foo" xmlns=""> <SubElement name="bar" /> </SomeElement> IN-このコード結果gotten-

string someElementStr = "<SomeElement name="foo"><SubElement name="bar" /></SomeElement>"; 
XmlDocumentFragment node = doc.CreateDocumentFragment(); 
node.InnerXml = someElementStr; 
someXmlNodeWithinDoc.AppendChild(node); 

を有する最も近いです。

私は

XmlElement elem = doc.CreateElement("SomeElement", "http://www.omg.org/space/xtce"); 
elem.SetAttribute("name","foo"); 
someXmlNodeWithinDoc.AppendChild(elem); 

をXMLベース文字列から行く必要はありません、これは私が欲しい、まさに生じたとき、私は別の構文を使用します。

<SomeElement name="foo"> </SomeElement>

私はそれがルートと同じであるため、その文書がのxmlnsを省略するだろう、私の現在のソリューション node.setNamespace("http://www.omg.org/space/xtce")で何行これを実行したいと思います。

一部の要素がモデルに文字列として格納されている場合、内部で単一の名前空間を使用するドキュメントを作成する慣用方法を教えてもらえますか?

このissueは、解決策がサブ要素を文字列としてのみ提供するという点を除いて(「新規」のすべて)、ほとんど同じです。私は要素全体が必要です。

+0

XML文字列をXmlDocumentにロードし、子ノードを取得して既存のXMLドキュメントに追加できます。 –

+0

LoadXmlで作成したドキュメントから要素を追加しようとしましたが、クロスドキュメントAppendChildが好きではありません。文書全体が正しくない文字列であることを示唆しているなら、私はいくつかの要素しか持っていません。 –

答えて

0

これは私が解決した解決策です。私はXDocument、XElementを使用したくないので、私は@ shop350ソリューションを使用しませんでした...しかし、フィードバックいただきありがとうございます!

// create a fragment which I am going to build my element based on text. 

XmlDocumentFragment frag = doc.CreateDocumentFragment(); 

// here I wrap my desired element in another element "dc" for don't care that has the namespace declaration. 
string str = ""; 
str = "<dc xmlns=\"" + xtceNamespace + "\" ><Parameter name=\"paramA\" parameterTypeRef=\"paramAType\"><AliasSet><Alias nameSpace=\"ID\" alias=\"0001\"/></AliasSet></Parameter></dc>"; 

// set the xml for the fragment (same namespace as doc) 
frag.InnerXml = str; 

// let someXmlNodeWithinDoc be of type XmlNode which I determined based on XPath search. 
// Here I attach the child element "Parameter" to the XmlNode directly effectively dropping the element <dc> 
someXmlNodeWithinDoc.AppendChild(frag.FirstChild.FirstChild); 
0
string xmlRoot = "<Root xmlns=\"http://www.omg.org/space/xtce\"></Root>"; 
string xmlChild = "<SomeElement name=\"foo\"><SubElement name = \"bar\"/></SomeElement >"; 
XDocument xDoc = XDocument.Parse(xmlRoot); 
XDocument xChild = XDocument.Parse(xmlChild);    
xChild.Root.Name = xDoc.Root.GetDefaultNamespace() + xChild.Root.Name.LocalName; 
foreach (XElement xChild2 in xChild.Root.Nodes()) 
{ 
    xChild2.Name = xDoc.Root.GetDefaultNamespace() + xChild2.Name.LocalName; 
} 
xDoc.Root.Add(xChild.Root); 
string xmlFinal = xDoc.ToString(); 
+0

XDocument xDocをお持ちの場合は、XmlDocument docを使用して多くの処理を行っています。何とかxChildをdocに追加できますか? –

関連する問題