0

我基本上想知道如何在另一个 XmlDocument 中插入一个 XmlDocument。

第一个 XmlDocument 将具有基本的页眉和页脚标记。第二个 XmlDocument 将是必须插入到第一个 XmlDocument 中的正文/数据标记。

            string tableData = null;
            using(StringWriter sw = new StringWriter())
            {
                rightsTable.WriteXml(sw);

                tableData = sw.ToString();                    
            }

            XmlDocument xmlTable = new XmlDocument();
            xmlTable.LoadXml(tableData);

            StringBuilder build = new StringBuilder();
            using (XmlWriter writer = XmlWriter.Create(build, new XmlWriterSettings { OmitXmlDeclaration = true }))
            {
                writer.WriteStartElement("dataheader");

                //need to insert the xmlTable here somehow

                writer.WriteEndElement();
            }

有没有更简单的解决方案?

4

4 回答 4

1

我不确定您真正在寻找什么,但这可以显示如何合并两个 xml 文档(使用 Linq2xml)

string xml1 =
    @"<xml1>
    <header>header1</header>
    <footer>footer</footer>
    </xml1>";

string xml2 =
    @"<xml2>
    <body>body</body> 
    <data>footer</data>
    </xml2>";

var xdoc1 = XElement.Parse(xml1);
var xdoc2 = XElement.Parse(xml2);

xdoc1.Descendants().First(d => d.Name == "header").AddAfterSelf(xdoc2.Elements());

var newxml = xdoc1.ToString();

输出

<xml1>
  <header>header1</header>
  <body>body</body>
  <data>footer</data>
  <footer>footer</footer>
</xml1>
于 2012-09-07T14:11:51.543 回答
1

在文档解析器中使用 importNode 功能。

于 2012-09-07T13:59:41.367 回答
1

您将需要CDATA分段编写​​内部 XML 文件。

用于writer.WriteCData此类节点,将内部 XML 作为文本传递。

writer.WriteCData(xmlTable.OuterXml);

另一种选择(感谢 DJQuimby)是将 XML 编码为某种 XML 兼容格式(例如 base64) - 请注意,使用的编码必须与 XML 兼容,并且某些编码方案会增加编码文档的大小(base64 增加了约 30%) .

于 2012-09-07T13:59:53.927 回答
1

您可以基于 CreateCDataSection 方法使用此代码

// Create an XmlCDataSection from your document
var cdata = xmlTable.CreateCDataSection("<test></test>");

XmlElement root = xmlTable.DocumentElement;

// Append the cdata section to your node
root.AppendChild(cdata);

链接:http: //msdn.microsoft.com/fr-fr/library/system.xml.xmldocument.createcdatasection.aspx

于 2012-09-07T14:00:45.250 回答