2017-03-23 20 views
0

ことを含まない:上記の要件で This Question名前空間接頭辞を持つC#の書き込みのXElementが、リファレンスを参照のルート要素で

このため

<root xmlns:ci="http://somewhere.com" xmlns:ca="http://somewhereelse.com"> 
    <ci:field1>test</ci:field1> 
    <ca:field2>another test</ca:field2> 
</root> 

とコードを書くことですが

が与えられ、

しかし、私の要求は書くことです。

<myrootelement> 
    <ci:field1>test</ci:field1> 
    <ca:field2 ca:attrb1="value">another test</ca:field2> 
</myrootelement> 

この要素は、ciとcaの独自の名前空間参照を含む別の大きなXMLの一部になるためです。今、「<myrootelement>」は、特定のXElementに子供のようにAPIを介して挿入されているので、私はXSDまたは名前空間などへのアクセスを持っていない

私は

  XElement element = new XElement("myrootelement", 
       new XElement(ci + "field1", "test"), 
       new XElement(ca + "field2", "another test", new XAttribute(ca + "attrb1", "value"))); 

が、その利回りしようとしました何

<myrootelement> 
    <field1 xmlns="http://somewhere.com">test</field1> 
    <field2 p2:attrb1="value" xmlns:p2="http://somewhereelse.com" xmlns="http://somewhereelse.com">another test</field2> 
</myrootelement> 

編集:追加詳細

上記要素は、次いで使用のREST APIに送信されますそれはXML仕様に準拠していないので、このようなLINQからXMLへのあなたのためにそれを行うことができますようにXML APIを期待していないため

{ 
. 
. 
var client = new RestClient(uri); 
var request = new RestRequest(Method.POST); 
request.AddHeader("cache-control", "no-cache"); 
request.AddParameter("text/xml", elem, ParameterType.RequestBody); 
. 
. 
} 

答えて

0

は何がを生成しようとしているのはXMLではありません。最善の策は、名前空間の定義を含む適切なXMLを生成することです(この時点でその情報がない場合は偽のURIを使用します)。その後、文字列操作操作(正規表現または単純String.Replace())を行います。これらの名前空間を削除します。

また、次のステップで意図したXML仕様に準拠していない文字列を挿入すると問題が発生する可能性がありますので、何らかのXMLを使用していると仮定すると、この質問はちょうどXY problemですこのタスクのAPI。

+0

0私は、生成しようとしている要素タグが有効ではないことを知っています - あなたが ''をドキュメントのルート**と考える場合にのみ。 1.しかし、大きなXMLがすべての名前空間の参照を持っているので、大きなXMLの有効なサブツリーです。 –

+0

私はそれが質問に記載されていることを認識しています。しかし、現在、あなたは 'XElement'を個別に作成しようとしています。あなたのコードのどこにも大きなXMLが記述されているので、その要素が他のXMLの一部であることを知る方法はありません – har07

+0

'XElement'(それの文字列表現ではない)を大きなXMLつまり、名前空間の宣言は 'myrootelement'に追加されません。https://dotnetfiddle.net/U5LHep – har07

関連する問題