2016-11-29 7 views
0

まずは、REST WebサービスからXMLレスポンスを取得するコードを書く必要があります。一部のタグには、タグ内の値は例です。C#でいくつかの値の中にタグを含むXMLファイルを解析する

<Root date="22.22.2222" version="specific system versonning"> 
<record field1="value1" field2="value1" specialfield="just_a_normal_value"/> 
<record field1="value1" field2"value2" specialfield=" <multiplesubfields subfield1= "subvalue1" subfield2="subvalue2"/> " field3="value3"/> 
<record field1="value1" field2"value2" specialfield=" <multiplesubfields subfield1= "subvalue1" subfield2="subvalue2" subfield3="subvalue3"/> " field3="value3"/> 
<record field1="value1" field2="value1" specialfield="just_a_normal_value"/> 
</Root> 

タグ値の内側のフィールドの数は固定されていません。 一部のレコードでは、特殊フィールドにはタグが内部にない通常の値のみが含まれています。その場合は変更が必要ありません。

<Root date="22.22.2222" version="specific system versonning"> 
<record field1="value1" field2="value1" specialfield="just_a_normal_value"/> 
<record field1="value1" field2"value2" subfield1= "subvalue1" subfield2="subvalue2" field3="value3"/> 
<record field1="value1" field2"value2" subfield1= "subvalue1" subfield2="subvalue2" subfield3="subvalue3" field3="value3"/> 
<record field1="value1" field2="value1" specialfield="just_a_normal_value"/> 
</Root> 

私は何をしたい、これらのサブフィールドと値を取得し、彼らは通常のフィールドをWHEREとして親タグに追加し、結果は以下のようにする必要があり、それからフィールドspecialfieldを削除することです次のXMLファイルを取得するためのコードです:

static void Main(string[] args) 
    { 
     string url = "www.blablabla.." 

     HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest; 
     req.Credentials = new NetworkCredential("USER", "PASSWORD"); 
     XmlDocument xmlDoc = new XmlDocument(); 

     using (HttpWebResponse resp = req.GetResponse() as HttpWebResponse) 
     { 
     xmlDoc.Load(resp.GetResponseStream()); 
     } 
    } 

上記のコードを働いている、完全にファイルをフェッチしている、私は

StringWriter sw = new StringWriter(); 
XmlTextWriter tx = new XmlTextWriter(sw); 
xmlDoc.WriteTo(tx); 
System.Console.Writeline(sw.ToString()); 
でそれをチェックします

しかし、私は清潔な方法で残りの部分を行う手がかりがありません。私はStackoverflowや他のサイトで多くの他の同様の記事を読むが、まだ始めることができませんでした。私は、私が働くかもしれない私自身のいくつかの醜いString treatementのアイデアを持っていることを意味しますが、私はそれらを試してみることもできません。

この投稿を読んでいただきありがとうございます。

+0

これは整形式のXMLではないため、整形式のXMLを期待するXMLパーサーでこれを解析しようとする試みは失敗します。特に、引用符の中の引用符は大きなショーストッパーになるでしょう。これが解析しようとしている**実際の** XMLであることを確認してください。また、ここに投稿する前に何かに解釈されるように祈っているわけではありません。例えば、最も内側の引用符は本当にエスケープ文字ですか? –

+0

こんにちは、コメントのおかげで、私は100%確信している私は受け取っている形式であり、あなたはそれを解析することはできません。 – user3255004

答えて

0
 XDocument doc = XDocument.Parse(xml); 

     var result = doc.Root.Descendants("record").Where(x => x.Attribute("specialfield") != null && x.Attribute("specialfield").Value.Contains("multiplesubfields")); 

     foreach(var item in result) 
     { 
      item.Attribute("specialfield").Remove(); 
     } 

あなたはそれがすべてのレコード・ノードを取る後、XDocumentを使用してspecifiedfieldmultiplesubfields文字列が含まれている属性を検索することができます。

0

LINQ to Xmlはxmlを扱うための便利なツールです。

特殊なxml(<multiplesubfields>)をXElementとして解析し、解析された要素の属性を親の<record>に追加できます。

const string XMLSTART = " <multiplesubfields"; 
XDocument doc = XDocument.Load(yourResponseStream); 

var specialsRecords = 
    doc.Root 
     .Descendants("record") 
     .Where(rec => rec.Attribute("specialfield") != null) 
     .Where(rec => rec.Attribute("specialfield").Value.StartsWith(XMLSTART)); 

foreach (var special in specialsRecords) 
{ 
    var multiplesubfields = XElement.Parse(special.Attribute("specialfield").Value); 
    foreach (var subField in multiplesubfields.Attributes()) 
    { 
     special.Add(subField); 
    } 

    // Remove original attribute 
    special.Attribute("specialfield").Remove(); 
} 

Console.WriteLine(doc.ToString()); 
+0

こんにちはファビオ、 あなたの助けてくれてありがとう、私は非常に残念ですが、XMLでの作業はまったく新しいものです。私は#熟練していないので、私の質問myaは愚かであり、 VSでコンパイルエラーが発生しました。 XmlGeneratorが現在のコンテキスト 以下の子孫( "レコード")に存在しません。私はまた、コンパイルエラーメッセージを持っています: 'System.Collections.Generic.IEnumerable 'の定義が含まれていません '場所'と拡張メソッド 'Where'の最初の引数を受け入れる'System.Collections.Generic.IEnumerable ... – user3255004

+0

私は既にSystem.Xml.Linqを使用しています。 – user3255004

+0

'拡張メソッドが' System.Linq'にあります – Fabio

-1

下のURLを確認すると、サンプルxmlを入手してそのオブジェクト形式を取得できます。 http://xmltocsharp.azurewebsites.net/

私はゼニスバンクナイジェリア極限石鹸apiと統合していたとき、私には同じようなことがありました。彼らは一貫性がないと私は状況を研究しなければならなかった。 歓声

関連する問題