2016-12-17 4 views
0

を使用してXMLファイルを編集することは、私のxmlファイルである:私はこれ使ってC#を編集するpicture of xml fileここでは、C#のasp.net

と私のコードは、それが正常に動作していないこと

XmlDocument xml = new XmlDocument(); 
     xml.Load(Server.MapPath("xyz.XML")); 

     foreach (XmlElement element in xml.SelectNodes("//table")) 
     { 
      foreach (XmlElement element1 in element) 
      { 
       if (element.SelectSingleNode("//cell").InnerText == "Amit Pate") 
       { 

        XmlNode newname = xml.CreateElement("Name"); 
        newname.InnerText = Name.Text; 
        element.ReplaceChild(newname, element1); 
        //xml.Save(Server.MapPath("xyz.XML")); 
       } 
       if (element.SelectSingleNode("//cell").InnerText == "SSE") 
       { 

        XmlNode newdsg = xml.CreateElement("Designation"); 
        newdsg.InnerText = Designation.Text; 
        element.ReplaceChild(newdsg, element1); 
        //xml.Save(Server.MapPath("xyz.XML")); 
       } 
       if (element.SelectSingleNode("//cell").InnerText == "asp.net") 
       { 

        XmlNode newskill = xml.CreateElement("Skill"); 
        newskill.InnerText = Skill.Text; 
        element.ReplaceChild(newskill, element1); 
        //xml.Save(Server.MapPath("xyz.XML")); 
       } 
       xml.Save(Server.MapPath("xyz.XML")); 
      } 
     } 

のようなものです。常にXMLファイルの最初のノードのみを更新しました。 xmlファイルを編集するには、私が行方不明または他のより良い方法を教えてください。私はC#またはASP.Netの何も知らないが、XMLを知っていますか、あなたは明示的に各<row>の下に各<cell>を検索するためにあなたの内側のforループとifロジックを変更する必要がありますが

はあなたに

答えて

0

ありがとう:

foreach (XmlElement rows in xml.SelectNodes("//table")) 
{ 
     foreach (XmlElement row in rows.SelectNodes("//row")) 
     { 
       if (row.SelectSingleNode("cell").InnerText ... 

外部ループのelement変数でダブルフォワードXPath式を使用してから、そのうちの1つだけ(常に最初のもの)を選択するので、<cell>ノードはすべて<table>の下にあります。 SelectSingleNode()(私が少し知っているVBとVBAでも同じ方法が使われています)。 XSLT編集XMLファイルに特異的に設計されたXPathに特別な目的、宣言型言語と兄弟を、使用することを検討して、言ったことで


。そうすることで、ループや条件付きロジックを回避できます。実際には、C#、ASP、VB、Java、PHP、Python、PerlなどのXSLT 1.0プロセッサを搭載しており、SaxonやXalanなどの専用XSLTプロセッサ(XSLT 2.0 and 3.0 processors)にもこれらの言語で外部コマンドラインを呼び出すことができます。以下は

<cell>ノードの名前を変更しているように見えるものの中にあなたの目的を複製する例です。

XML入力

<document> 
    <page> 
     <table rows="3" cols="1"> 
      <row> 
       <cell>Amit Pate</cell> 
      </row> 
      <row> 
       <cell>SSE</cell> 
      </row> 
      <row> 
       <cell>asp.net</cell> 
      </row>   
     </table> 
    </page> 
</document> 

XSLTスクリプト(としての.xsl --specialもを保存-formed .xmlファイル - 他の.xmlと同じように)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output indent="yes"/> 
<xsl:strip-space elements="*"/> 

    <xsl:template match="/document|page"> 
     <xsl:copy> 
      <xsl:apply-templates select="*"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="table"> 
     <xsl:copy> 
      <row><Name><xsl:value-of select="row[1]"/></Name></row> 
      <row><Designation><xsl:value-of select="row[2]"/></Designation></row> 
      <row><Skill><xsl:value-of select="row[3]"/></Skill></row> 
     </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

XML出力

<?xml version="1.0"?> 
<document> 
    <page> 
     <table> 
      <row> 
       <Name>Amit Pate</Name> 
      </row> 
      <row> 
       <Designation>SSE</Designation> 
      </row> 
      <row> 
       <Skill>asp.net</Skill> 
      </row> 
     </table> 
    </page> 
</document> 

参照

+0

おかげでたくさんの@Parfait。それは適切に動作します。 –

関連する問題