C# 未追加XML元素-XPath
我试图添加一个新元素iconlink作为每个布局元素的子元素。我使用Xpath表达式选择节点,然后附加一个子节点。但每次仅将其附加到last版面。 有人能帮我找出问题所在吗。谢谢C# 未追加XML元素-XPath,c#,xml,xpath,C#,Xml,Xpath,我试图添加一个新元素iconlink作为每个布局元素的子元素。我使用Xpath表达式选择节点,然后附加一个子节点。但每次仅将其附加到last版面。 有人能帮我找出问题所在吗。谢谢 XmlNode newNode = layoutDocument.CreateElement("iconlink"); XmlAttribute imageAtr = layoutDocument.CreateAttribute("image"); imageAtr.Va
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很熟悉的话)@FrancisDucharmeLINQ到XML
也使用XPath(xDocument.XPathSelectElement(…)@L.B是的,它只选择了第一个布局元素Yes你是对的。请原谅,我对XML和DOM的了解很差。