2009-05-22 15 views
2

linq.xmlからxelementを使用してxmlを作成しています。 私hirerachyは、私がここにこのスキーマ STR Cのルートxelement要素に名前空間を追加/作成する

は、スキーマ生成

XNamespace ns = XNamespace.Get("urn:APISchema.xsd"); 
root = new XElement(ns + "Foo"); 
root.Add(new XElement("version", "2")); 
root.Add(new XElement("foochild", "str")); 

ための私のコードですが、結果として得られるスキーマが

<Foo xlmns="urn:APISchema.xsd"> 
<version xlmns="">2</version> 
<foochild xlmns="">str</foochild> 
</Foo> 
ある場合は、この

のようないくつかのことです

なぜこのような問題があるのかルートチャイルドにxlmnを追加する...?

答えて

2
root.Add(new XElement(namespace + "foo", "str")) 

編集:さらにSO検索では、this questionは同じ問題に対処しているようです。

+0

"Namespace"は悪い変数名です。 –

+0

@ root.Add(新しいXElement(名前空間+ "foo"、 "str")) 私のxmlは必須ではありません。はるかに長い.. 名前空間に関してyep!私はその悪い変数名に同意します:)しかし、上のコードサンプルのためのちょうどタイプミスです。 –

+1

すべての要素には名前空間があります。したがって、要素名の前にXNamespaceを使用しないと、XElementコンストラクタは親の名前空間を ""で上書きすることを意味します。要するに、すべてに名前空間を追加する必要があります...右のSO関連ボックスを見ると、このリンクが役立ちます。 http://stackoverflow.com/questions/477962/how-to-create-xelement-with-default-namespace-for-children-without-using-xnamespa –

0

名前空間のない2つの要素 'usr:APISchema.xsd :: Foo'を追加しました。結果として得られるXMLは期待されるものです。追加された各要素に名前空間を追加する必要があります(root.Add(new XElement(namespace + "foochild"))。

+0

私はルート要素に名前空間を追加したいだけです。 もう少し詳細を教えてください。 –

0
XNamespace myNameSpace = XNamespace.Get("urn:APISchema.xsd"); 
     root = new XElement(myNameSpace + "Foo", 
           new XElement(myNameSpace + "foo", "str")); 

IMOこれは読みやすいです。しかしリチャードは、名前空間を追加する必要があると述べています。

+0

David ...私が与えたサンプルxmlはちょうど例です...私の実際のXMLにはもっと多くのネストされた要素とそのちょっとした動的なものが含まれています。だから私はこれを使うことができません... doigは何ですか?ルート要素をネームスペースで追加して要素を追加するよりも... 唯一の問題は、ルートレベルの子にもxmlns = ""を表示することです。 –

+0

どのように動的XMLを作成していますか?ルートで行ったように、子ノードのそれぞれに名前空間を追加する必要があります。建物をどのように動的に役立つかのサンプルを投稿することができます。 –

0
XNamespace myNamespace = XNamespace.Get("urn:APISchema.xsd"); 
root = new XElement(myNamespace + "Foo", 
    new XElement(myNamespace + "version", "2"), 
    new XElement(myNamespace + "foochild", "str")); 

それを与えると、それはあなたのためのトリックを行う必要があります。

関連する問題