将任何用户输入添加为 XML 文档中的节点
本文关键字:文档 节点 XML 任何 用户 输入 添加 | 更新日期: 2023-09-27 18:32:56
我想将一个XML字符串作为新节点添加到现有的XML文档中。
例如,假设来自用户的输入是:
<bk:book>
<title>Pride And Prejudice</title>
<authorlastname>Jane</authorlastname>
<authorfirstname>Austen</authorfirstname>
<price>24.95</price>
</bk:book>
我正在尝试插入该用户输入,如下所示:
xml_SourceDoc.Root.LastNode.AddAfterSelf(XElement.Parse(xmlString));
但是,该声明引发了以下异常:
bk is an undeclared prefix. Line 1, position 2.
如何更改我的方法,以便我可以成功插入用户输入的任何文本?
如果你真的不知道用户会输入什么,你可以简单地通过 LINQ to XML XCData 类将其作为 CDATA 处理。
下面是作为节点插入容器 XML 文档时的示例数据的外观:
<doc>
<content><![CDATA[<bk:book>
<title>Pride And Prejudice</title>
<authorlastname>Jane</authorlastname>
<authorfirstname>Austen</authorfirstname>
<price>24.95</price>
</bk:book>]]></content>
</doc>
下面是创建上述示例文档的示例程序:
using System;
using System.Xml;
using System.Xml.Linq;
public class CDataExample
{
public static void Main()
{
string documentXml = "<doc><content></content></doc>";
XElement doc = XElement.Parse(documentXml, LoadOptions.None);
string userInput =
@"<bk:book>
<title>Pride And Prejudice</title>
<authorlastname>Jane</authorlastname>
<authorfirstname>Austen</authorfirstname>
<price>24.95</price>
</bk:book>";
XCData cdata = new XCData(userInput);
doc.Element("content").Add(cdata);
Console.WriteLine(doc.ToString());
}
}
首先检查 xml 是否可解析:
检查格式正确的 XML,而无需尝试/捕获?
if(IsValidXML(xmlString))
{
xml_SourceDoc.Root.LastNode.AddAfterSelf(XElement.Parse(xmlString));
}
首先,创建要添加的XElement:
xmlString = new XElement(new XElement("book", newXAttribute("bk) ,(new XElement("title", titleValue), new EXelement("authorlastname", authorlastNameValue ... 等等。
然后添加它:
xml_SourceDoc.Root.Add(xmlString);
您提到的异常导致您没有添加创建 XElement 的属性