2016-03-25 12 views
1

次のダミーXMLファイルでは、stepContentノードで検索文字列を見つけてElementIDとstepIDを返す必要があります。私はLinqをC#で使用していますが、検索文字列を見つけてノード全体を返すことができますが、検索されたノードのstepIDとElementIDを返す方法を見つけることができません。これはダミーのXMLであり、これらのIDノードの深さは異なる可能性があるので、返された値の名前を照会するために何かが必要です。IDと戻り値にLinqを使用してXMLファイルを検索

<?xml version="1.0" encoding="utf-8"?> 
<Root> 
    <Elements> 
     <Element> 
      <ElementID>A001</ElementID> 
      <Detail><![CDATA[<ul> 
      <li> 
       For top candidates 
      </li> 
      <li> 
       Discount upto 50% 
      </li> 
      </ul>]]></Detail> 
      <Steps> 
       <Step> 
        <stepID>S001</stepID> 
        <StepHeading>Prepare for top candidates</StepHeading> 
        <stepContent><![CDATA[<ul> 
       <li>Some dummy text</li> 
       <li>Plan some dummy items.</li> 
       </ul>]]></stepContent> 
       </Step> 
       <Step> 
        <stepID>S002</stepID> 
        <StepHeading>Invite top candidates</StepHeading> 
        <stepContent><![CDATA[<ul> 
       <li>Dummy text for invitation.</li> 
       <li>Dummy text for 2nd invitation.</li> 

       </ul>]]></stepContent> 
       </Step> 
      </Steps> 
     </Element> 
     <Element> 
      <ElementID>A002</ElementID> 
      <Detail><![CDATA[<ul> 
      <li> 
       For next set of top candidates 
      </li> 
      <li> 
       Discount upto 30% 
      </li> 
      </ul>]]></Detail> 
      <Steps> 
       <Step> 
        <stepID>S003</stepID> 
        <StepHeading>Prepare for next set of top candidates</StepHeading> 
        <stepContent><![CDATA[<ul> 
       <li>Some dummy text</li> 
       <li>Plan some dummy items.</li> 
       </ul>]]></stepContent> 
       </Step> 
       <Step> 
        <stepID>S004</stepID> 
        <StepHeading>Invite next set of top candidates</StepHeading> 
        <stepContent><![CDATA[<ul> 
       <li>Dummy text for invitation.</li> 
       <li>Dummy text for 2nd invitation.</li> 

       </ul>]]></stepContent> 
       </Step> 
      </Steps> 
     </Element> 
    </Elements> 
</Root> 
+0

文字列xmlPath = Server.MapPathの( "myXMLPath.xml"); var xml = XDocument.Load(@xmlPath); XDocument xDocument = XDocument.Parse(xml.ToString()); var resultNodes = xDocument.Descendants( "stepContent")。ここで(i => i.Value.ToLower()。Contains(searchString)); 結果セットからIDを取得するにはどうすればよいですか? – onlynitins

+2

質問を編集してそこにC#コードを置く(あなたのXMLとは別のコードブロック) – har07

答えて

0

あなたは、限りstepContentからElementIDstepIDの相対的な深さが一貫しているよう

「私はstepContentノード内の検索文字列を検索し、ElementIDstepIDを返す必要が」このようにすることができます:

resultNodes.Select(o => new YourModelClass() 
      { 
       stepId = (string)o.Parent.Element("stepID"), 
       elementId = (string)o.Parent.Parent.Parent.Element("ElementID") 
       //alternatively : 
       //elementId = (string)o.Ancestors("Element").First().Element("ElementID") 
      }); 
0

このようにすることができます。

var doc = XDocument.Load(filepath); 

var steps = doc.Root.Descendants("Step") 
    .Where(e=> ((string)e.Element("stepContent").Value).ToLower().Contains("dummy text for ")) 
    .Select(s=> new 
      { 
       StepId = s.Element("stepID").Value, 
       StepHeading = s.Element("stepID").Value 
      }); 

チェックこのDemo

関連する問題