我有一个使用 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/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
我正在尝试创建一个带有项目符号字符的Ruby1.9.3字符串。str="•"+"helloworld"但是,当我输入它时,我收到有关非ASCII字符的语法错误。我该怎么做? 最佳答案 你可以把Unicode字符放在那里。str="\u2022"+"helloworld" 关于ruby-如何在Ruby字符串中插入项目符号字符?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1195
Ruby有一些不错的文档生成器,例如Yard、rDoc,甚至Glyph。问题是Sphinx可以做网站、PDF、epub、LaTex等。它在重组文本中完成所有这些事情。在Ruby世界中有替代方案吗?也许是程序的组合?如果我也能使用Markdown就更好了。 最佳答案 自1.0版以来,Sphinx有了“域”的概念,它是从Python和/或C以外的语言标记代码实体(如方法调用、对象、函数等)的方法。有一个rubydomain,所以你可以只使用Sphinx本身。您唯一会缺少的(我认为)是Sphinx使用autodoc从源代码自动创建文档
我想知道是否可以通过自动创建数组来插入数组,如果数组不存在的话,就像在PHP中一样:$toto[]='titi';如果尚未定义$toto,它将创建数组并将“titi”压入。如果已经存在,它只会推送。在Ruby中我必须这样做:toto||=[]toto.push('titi')可以一行完成吗?因为如果我有一个循环,它会测试“||=”,除了第一次:Person.all.eachdo|person|toto||=[]#with1billionofperson,thislineisuseless999999999times...toto.push(person.name)你有更好的解决方案吗?
在我的用户模型中,我有一堆属性,例如is_foos_admin和is_bars_admin,它们决定允许用户编辑哪些类型的记录。我想干掉我的编辑链接,目前看起来像这样:'edit'ifcurrent_user.is_foos_admin?%>...'edit'ifcurrent_user.is_bars_admin?%>我想做一个帮助程序,让我传入一个foo或bar并返回一个链接来编辑它,就像这样:助手可能看起来像这样(这不起作用):defedit_link_for(thing)ifcurrent_user.is_things_admin?link_to'Edit',edit_poly
我有以下现有的Dog对象数组,它们按age属性排序:classDogattr_accessor:agedefinitialize(age)@age=ageendenddogs=[Dog.new(1),Dog.new(4),Dog.new(10)]我现在想插入一条新的狗记录,并将它放在数组中的正确位置。假设我想插入这个对象:another_dog=Dog.new(8)我想把它插入到数组中,让它成为数组中的第三项。这是一个人为的示例,旨在演示我特别想如何将一个项目插入到现有的有序数组中。我意识到我可以创建一个全新的数组并重新对所有对象进行排序,但这不是我的目标。谢谢!