C# 未追加XML元素-XPath

C# 未追加XML元素-XPath,c#,xml,xpath,C#,Xml,Xpath,我试图添加一个新元素iconlink作为每个布局元素的子元素。我使用Xpath表达式选择节点,然后附加一个子节点。但每次仅将其附加到last版面。 有人能帮我找出问题所在吗。谢谢 XmlNode newNode = layoutDocument.CreateElement("iconlink"); XmlAttribute imageAtr = layoutDocument.CreateAttribute("image"); imageAtr.Va

我试图添加一个新元素iconlink作为每个布局元素的子元素。我使用Xpath表达式选择节点,然后附加一个子节点。但每次仅将其附加到last版面。 有人能帮我找出问题所在吗。谢谢

        XmlNode newNode = layoutDocument.CreateElement("iconlink");
        XmlAttribute imageAtr = layoutDocument.CreateAttribute("image");
        imageAtr.Value = "CC_Status_Background.png";
        newNode.Attributes.Append(imageAtr);

        var nodeList = layoutDocument.SelectNodes("//Layout[@class]");
        if (nodeList != null && nodeList.Count > 0)
        {
            foreach (XmlNode node in nodeList)
            {
                node.AppendChild(newNode);
                layoutModified = true;
            }
        }


       if (layoutModified)
       {
          //Save modified document
       }
XML文件如图所示

<?xml version="1.0" encoding="utf-8"?>
<Layouts layoutid="161">
  <Layout class="1">
    <Page pagenumber="1" name="Page 1" />
    <Page pagenumber="2" name="Page 2" />
    <Page pagenumber="0" name="Page 0">
      <iconlink id="iconlink_1262128931523" actionId="" tooltip="" image="CC_Favorite.png" required="true" />
      <iconlink id="iconlink_1262128935340" actionId="" tooltip="" image="CC_Reject.png" required="true" />
      <iconlink id="iconlink_1262128932676" actionId="" tooltip="" image="CC_Possible.png" required="true" />
      <iconlink id="iconlink_1262128940983" actionId="" tooltip="" image="CC_Comment.png" required="true" />
      <iconlink id="iconlink_1262128940984" actionId="" tooltip="" image="CC_Detail.png" required="true" />
      <iconlink id="iconlink_1262128940982" actionId="" tooltip="" image="CC_Map.gif" required="true" />      
    </Page>   
  </Layout>
  <Layout class="2">
     <Page pagenumber="1" name="Page 1" />
    <Page pagenumber="2" name="Page 2" />
    <Page pagenumber="0" name="Page 0">
      <iconlink id="iconlink_1262128931523" actionId="" tooltip="" image="CC_Favorite.png" required="true" />
      <iconlink id="iconlink_1262128935340" actionId="" tooltip="" image="CC_Reject.png" required="true" />
      <iconlink id="iconlink_1262128932676" actionId="" tooltip="" image="CC_Possible.png" required="true" />
      <iconlink id="iconlink_1262128940983" actionId="" tooltip="" image="CC_Comment.png" required="true" />
      <iconlink id="iconlink_1262128940984" actionId="" tooltip="" image="CC_Detail.png" required="true" />
      <iconlink id="iconlink_1262128940982" actionId="" tooltip="" image="CC_Map.gif" required="true" />      
    </Page>   
**<iconlink image="CC_Status_Background.png"></iconlink>**
   </Layout>
</Layouts>

****

您将节点视为文本,但在DOM中,节点是元素的特定实例。您创建了元素的单个实例,然后尝试将其添加到多个父元素。一个XML元素只能有一个父元素,所以看起来您的代码只是在移动它。尝试为每个父级创建一个新实例:

var nodeList = layoutDocument.SelectNodes("//Layout[@class]");
if (nodeList != null && nodeList.Count > 0)
{
    foreach (XmlNode node in nodeList)
    {
        XmlNode newNode = layoutDocument.CreateElement("iconlink");
        XmlAttribute imageAtr = layoutDocument.CreateAttribute("image");
        imageAtr.Value = "CC_Status_Background.png";
        newNode.Attributes.Append(imageAtr);
        node.AppendChild(newNode);
        layoutModified = true;
    }
}

你有没有试过使用Xpath呢?
//Layout[@class='1']
你坚持使用Xpath吗?LINQ到XML要容易得多(如果你对LINQ很熟悉的话)@FrancisDucharme
LINQ到XML
也使用XPath(xDocument.XPathSelectElement(…)@L.B是的,它只选择了第一个布局元素Yes你是对的。请原谅,我对XML和DOM的了解很差。