将任何用户输入添加为 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.

如何更改我的方法,以便我可以成功插入用户输入的任何文本?

将任何用户输入添加为 XML 文档中的节点

如果你真的不知道用户会输入什么,你可以简单地通过 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", new

XAttribute("bk) ,(new XElement("title", titleValue), new EXelement("authorlastname", authorlastNameValue ... 等等。

然后添加它:

xml_SourceDoc.Root.Add(xmlString);

提到的异常导致您没有添加创建 XElement 的属性