我目前正在开发一个项目,我必须创建 XMLNode 并将它们插入 XML 文件中的特定位置。
XMLNode 是一个包含大约 90 个单元的行。
<Row ss:AutoFitHeight=\"0\">
<Cell ss:StyleID=\"s77\"><Data ss:Type=\"String\">ABC</Data></Cell>
<Cell><Data ss:Type=\"Number\">100</Data></Cell>
<Cell ss:StyleID=\"s77\"><Data ss:Type=\"String\">ABC</Data></Cell>
<Cell><Data ss:Type=\"String\" x:Ticked=\"1\">---</Data></Cell>
</Row>
我通过 Stringbuilder 创建文档并使用以下命令读取它们:
using (StringReader sr = new StringReader((sbuilder.ToString())))
using (XmlTextReader xtr = new XmlTextReader(sr) { Namespaces = false })
{
xdoc.Load(xtr);
}
我想要添加节点的 XML 文件是一个带有 3 个选项卡的 Excel 2003 工作表,但我只需要第一个。我将其加载为:
XmlDocument xtemplate = new XmlDocument();
xtemplate.Load(file);
并尝试将我的节点导入到模板 XML 中
XmlNode tempnode = xtemplate.ImportNode(xdoc.DocumentElement, true);
在这里我得到一个 XmlException
':' - 字符十六进制值 0x3A,不得包含在名称中。
我不知道这是从哪里来的。没有单元格或行获得自定义名称,并且我找不到包含除字母以外的任何内容的名称(名称为“#document”的文档除外)
我希望有人也经历过这个异常,并可以帮助我理解它,这样我就可以解决我的问题。
我希望您能理解我的问题是什么,如果不能理解,我会尽力更好地解释它。
我的英语有点生疏,所以如果我把它宰了,请仁慈。
Update:
它现在正在使用 @dbc 的解决方案和一点补充:
string innerXml = @"<Row
xmlns=""urn:schemas-microsoft-com:office:spreadsheet""
xmlns:o=""urn:schemas-microsoft-com:office:office""
xmlns:x=""urn:schemas-microsoft-com:office:excel""
xmlns:ss=""urn:schemas-microsoft-com:office:spreadsheet""
xmlns:html=""http://www.w3.org/TR/REC-html40""
ss:AutoFitHeight=""0"">
<Cell ss:StyleID=""s77"">
<Data ss:Type=""String"">ABC</Data>
</Cell>
<Cell>
<Data ss:Type=""Number"">100</Data>
</Cell>
<Cell ss:StyleID=""s77"">
<Data ss:Type=""String"">ABC</Data>
</Cell>
<Cell>
<Data ss:Type=""String"" x:Ticked=""1"">---</Data>
</Cell>
</Row>";
var xdoc = new XmlDocument();
xdoc.LoadXml(innerXml); // Do not use new XmlTextReader(sr) { Namespaces = false })
XmlDocument xtemplate = new XmlDocument();
// Load xtemplate from file as before
XmlNode tempnode = xtemplate.ImportNode(xdoc.DocumentElement, true);
// Insert into Target Document
tempnode.ChildNodes[0].ParentNode.Attributes.RemoveAt(0); // Times 5 to delete all Namespacedefinitions