gpt4 book ai didi

c# - 将兄弟节点插入到 xml 文档中

转载 作者:数据小太阳 更新时间:2023-10-29 02:21:58 27 4
gpt4 key购买 nike

我有一个使用 XmlDocument 加载 XML 字符串的 .net Web 应用程序。 XML格式如下:

<Sections name="Section Opening Page" PageContentID="201" Template="ReportTags">
<Chapter Name="Introduction" PageContentID="202" Template="ReportTags">
<Pages Name="Why this Document?" PageContentID="203" Template="ReportTags" />
<Pages Name="Target Audience" PageContentID="204" Template="ReportTags" />
</Chapter>
<Chapter Name="Detailed Results" PageContentID="205" Template="ReportTags">
<Pages Name="Question List" PageContentID="206" Template="ReportTags" />
<Pages Name="Answers" PageContentID="207" Template="ReportTags" />
<Pages Name="Comments" PageContentID="208" Template="ReportTags" />
</Chapter>
<Chapter Name="Appendix 1" PageContentID="209" Template="ReportTags">
<Pages Name="Page 1" PageContentID="210" Template="ReportTags" />
<Pages Name="Page 2" PageContentID="211" Template="ReportTags" />
<Pages Name="Page 3" PageContentID="212" Template="ReportTags" />
</Chapter>
<Chapter Name="Appendix 2" PageContentID="213" Template="ReportTags">
<Pages Name="Page 1" PageContentID="214" Template="ReportTags" />
<Pages Name="Page 2" PageContentID="215" Template="ReportTags" />
</Chapter>
</Sections>

例如,我试图在名为“详细结果”的“章节”下插入一个名为“问题列表”和“答案”的“页面”之间的新节点。我用来执行此操作的代码如下:

try
{
string sPath = "Sections/Chapter/Pages[@PageContentID='" + selectedNode.Value + "']";
XmlNode xmlNode = xmlDoc.SelectSingleNode(sPath);

XmlElement xNewChild = xmlDoc.CreateElement("Pages");
xNewChild.SetAttribute("Name", "Another New Page");
xNewChild.SetAttribute("PageContentID", Guid.NewGuid().ToString());
xNewChild.SetAttribute("Template", "ReportTags");

xmlDoc.DocumentElement.InsertAfter(xNewChild, xmlNode);
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
}

但是,它不起作用,我的新节点没有插入到正确的位置,而是插入到顶部。

任何帮助将不胜感激!!

最佳答案

您确定 xmlNode 返回您认为的节点吗?使用调试器逐步完成它。

如果它是 null,那么您插入的节点将被添加为您所描述的 DocumentElement 的子节点。如果它返回页面节点,那么您应该得到一个异常“引用节点不是该节点的子节点”。

这是不言自明的。代码:

doc.DocumentElement.InsertAfter(xNewChild, xmlNode); 

应该是:

xmlNode.ParentNode.InsertAfter(xNewChild, xmlNode);

也就是说,如果可能的话,我会使用 XLinq 的一部分 XDocument。 API 更好、更强大,而且通常性能更高。一个例子:

var element = x.Descendants("Pages").Single(e => e.Attribute("PageContentID").Value == "206");

var newElement = new XElement("Pages",
new XAttribute("Name", "Another New Page"),
new XAttribute("PageContentID", Guid.NewGuid().ToString()),
new XAttribute("Template", "ReportTags"));

element.AddAfterSelf(newElement);

关于c# - 将兄弟节点插入到 xml 文档中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23585402/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com