2016-12-17 14 views
0

を使用して行にあるかどうかを知るためにどのように私はこの単純なXMLC#の2つの要素は、XML LINQ

<parent> 
    <child> 
     <son attribute="1"/> 
     <sp> 
     <son attribute="2"/> 
     <sp> 
    </child> 
    <child> 
     <another child> 
     <son attribute ="3"/> 
     <sp> 
     </another child> 
    </child> 
    <child> 
     <son attribute="5"/> 
    </child> 
</parent> 

ここに私のコードは今のところですがあります。実際に私は、出力が

<parent> 
     <child> 
      <son attribute="1"/> 
      <sp value="1"> 
      <son attribute="2"/> 
      <sp value="2"> 
     </child> 
     <child> 
      <another child> 
      <son attribute ="3"/> 
      <sp value="3"> 
      </another child> 
     </child> 
     <child> 
      <son attribute="5"/> 
     </child> 
    </parent> 

になります私の問題は、お互いにその隣場合sonspタグは、隣接している場合はどのように私はチェックしないで次の

XDocument doc = XDocument.Parse(string); 
foreach (var el in doc.Descendants("child").ToList()) 
{ 
} 

何を知りません、spタグは。これは、あなたがそれを行う方法ですsonタグ

+0

で有効な形式を持っていることを確認する必要があります。私はしばらくXSLTを使用していないが、C#は間違いなくそれをサポートしているので、これらのSOの質問は助けになるかもしれない:http://stackoverflow.com/questions/23274312/how-to-match-and-wrap-identical-and-隣接ノードと一緒にxslt-1-0とhttp://stackoverflow.com/questions/32701706/xslt-identify-consecutive-nodes-which-has-same-patters-of-attribute-values – user783836

+0

それは息子の隣ではない? – DarkKnight

+0

@DarkKnight何も起こりません、例 – imadammy

答えて

1

の属性値を取得します

var xmldoc = XDocument.Parse(xml); 
var getReadyForSp = false; 
string sonvalue = "-1"; 

foreach (var ele1 in xmldoc.Element("parent").Elements("child")) 
foreach (var element in ele1.Elements()) 
{ 
    if (element.Name == "son") 
    { 
     getReadyForSp = true; 
     sonvalue = element.Attribute("attribute").Value; 
    } 
    if (getReadyForSp && element.Name == "sp") 
    { 
     XAttribute attribute = new XAttribute("value", sonvalue); 
     element.Add(attribute); 
     getReadyForSp = false; 
    } 

} 

しかし、あなたはSPの要素は、あなたが代わりにストレートのC#のこの仕事のためにXSLTを使用しようとしたほうが良いかもしれ<sp/>

+0

のように動作しますが、別のタグの内側にあるsonタグとspタグはどうですか?私は例を更新しました。ありがとうございます – imadammy

+0

@imadammy:このネストされた構造の一部である要素名の定義済みのセットを持っていますか?何種類の仲介ノードが存在するのか不明な場合、ロジックは少し複雑になります。 – DarkKnight

+0

ありがとうございます。ちょうど論理的なステートメントを追加します。 – imadammy

関連する問題