2

我想将一个 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.

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

4

3 回答 3

2

如果您真的不知道用户将输入什么,您可以通过LINQ to XML XCData Class将其作为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());
    }
}
于 2014-09-12T20:20:24.483 回答
0

首先,创建要添加的 XElement:

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

然后添加它:

xml_SourceDoc.Root.Add(xmlString);

您提到的异常是由于您没有添加创建 XElement 的属性

于 2013-09-27T09:22:22.803 回答
0

首先检查 xml 是否可解析:

检查格式正确的 XML 而不使用 try/catch?

if(IsValidXML(xmlString))
{
    xml_SourceDoc.Root.LastNode.AddAfterSelf(XElement.Parse(xmlString));
}
于 2013-09-27T07:21:34.123 回答