2016-12-17 17 views
0

這裏編輯XML文件是我的xml文件:picture of xml file使用C#asp.net

我想編輯該使用C#和我的代碼就是這樣

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文件。

謝謝

回答

0

雖然我什麼都不知道的C#或ASP.Net,但只知道XML,你可能需要修改你的內心for循環和if邏輯明確地搜索每個<cell>下的每個<row>

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

現在,看起來您正在搜索<table>下的所有<cell>節點,因爲您在外環的element變量上使用雙向前向XPath表達式,然後僅選擇其中的一個(總是第一個)與SelectSingleNode()(我知道一點VB和VBA中使用的方法相同)。


雖這麼說,可考慮使用XSLT,專用的,聲明的語言和兄弟姐妹的XPath,專門編輯XML文件設計。這樣做可以避免任何循環和條件邏輯。實際上,所有通用語言都帶有XSLT 1.0處理器,包括C#,ASP,VB,Java,PHP,Python,Perl等,並且這些語言可以將外部命令行調用到專用的XSLT處理器,如撒克遜或Xalan,即使是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以及形成.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。它正常工作。 –