- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我目前正在开展一个项目,我必须在该项目中创建 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 文件是一个 Excel 2003 工作表,有 3 个选项卡,但我只需要第一个。我加载它:
XmlDocument xtemplate = new XmlDocument();
xtemplate.Load(file);
并尝试将我的节点导入到模板 XML 中
XmlNode tempnode = xtemplate.ImportNode(xdoc.DocumentElement, true);
在这里我得到一个 XmlException
The ':' - characters Hex value 0x3A, shall not be included in a name.
我不知道这是从哪里来的。没有单元格或行获得自定义名称,我找不到包含除字母以外的任何内容的名称(名称为“#document”的文档除外)
我希望有人也遇到过这个异常,可以帮助我理解它,这样我就可以解决我的问题。
我希望你能理解我的问题是什么,如果没有,我会尽力解释得更好。我的英语有点生疏,所以如果我把它宰了,请怜悯。
更新:
它现在正在使用来自@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
最佳答案
问题是,在您的 XML 片段中,您没有定义 namespaces对应于命名空间前缀 ss
和 x
。 namespace 前缀只是对给定元素范围内的实际 namespace 表的缩写查找。因此下面
<ss:Row xmlns:ss="http://somenamespace"/>
<xxxx:Row xmlns:xxxx="http://somenamespace"/>
<Row xmlns="http://somenamespace"/>
所有定义相同的东西——一个名为 {http://somenamespace}Row
的 XML 元素。
当 ImportNode
将您的节点从一个文档复制到另一个文档,它会尝试将 namespace 前缀从旧文档映射到新文档以保留每个节点的实际 namespace ——但是您的前缀缺少它们的定义,因此无法执行映射并且出现异常被抛出。
要更正此问题,您必须将正确的命名空间定义添加到您的 XML 片段,与 Excel 2003 XML 格式使用的命名空间定义一致。 Office 2003: XML Reference Schemas会告诉你正确的命名空间。这样做之后,您应该使用 XmlDocument.LoadXml()
加载 XML 片段,然后来自 ImportNode
的异常将消失。
例如:
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); // No exception
关于c# - XMLDocument.Importnode 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28857669/
我在 html 文档中编写了一个函数,它应该从另一个 html 文档中获取一个节点。 我阅读了有关 importNode() 的内容,但我不明白应该如何指向要从中导入的文档。我在任何地方都找不到任何网
我在一些代码示例中注意到克隆 DOM 节点并将其附加到现有元素的看似不同的方法: element.appendChild(something.cloneNode(true)); element.app
我想使用 HTML 导入,因此我创建了两个文件。 文件1: div { height: 300px; width: 30
我目前正在开展一个项目,我必须在该项目中创建 XMLNode 并将它们插入 XML 文件中的特定位置。 XMLNode 是一个包含大约 90 个单元格的行。 ABC 100 ABC -
我的 XML 看起来像 this. 我想将 collected_objects“导出”到另一个文档中。这是我的代码- NodeList nList = reader.getElementsByTa
我有一个动态页面,通过一个栏按钮,我可以更改主要 div 内容。大多数页面都是静态的,除了一个包含 JavaScript(RGraph 图表)的页面。这就是为什么为了使其正常工作,我使用以下代码: v
我有一个模板,我正在通过 document.importNode 进行迭代克隆。我不能做的是向克隆的元素添加一个类。 var t = document.querySelector('#template
我一直在网上四处寻找,我很确定我已经知道答案(“否”),但我想检查一下: IE 支持 importNode() 了吗?有没有比遍历 DOM 和创建节点更好的选择? (我见过 the clasic ar
重新升级此代码: var tmpNewNode = xdoc.ImportNode(newNode, true); if (oldNode.ParentNode != null)
我正在阅读“Web Components mit Polymer”一书,并尝试了书中的以下代码: var tplContent = document.getEl
我想复制一个节点到不同的Documentg,但是它总是有DOMException about org.apache.harmony.xml.dom.NodeImpl.setNameNS(NodeImp
我正在使用 XmlDocument 迁移一些代码使用XDocument .作为此代码的一部分,我需要将一个文档中的元素添加到另一个文档中。有了 XmlDocument,我可以使用 ImportNode
我正在编写必须添加节点到 XML 文档中给定节点的函数。 这是该函数的实现: /** * Adds the node aNewChild to the end of the list of chil
我正在尝试使用以下示例理解 html 中的 importNode。 假设我们有一个content.html: Hi there! 和一个main.ht
Document.importNode in specification Node.cloneNode in specification 这两种方法同样有效。请给我一个真实的例子,我可以在其中看到这些
请注意,SOAPHeader 扩展了 Node 和 Element 接口(interface): Document docToAppend= getDoc(); final SOAPHeader
我正在尝试使用标准 Oracle JDK 7 和 Saxon HE 合并两个 XML 文档,但我不断收到: org.w3c.dom.DOMException: NOT_SUPPORTED_ERR: T
我发现 importNode 之后的 xml 会有一个“默认”前缀。经过一些实验,我发现了一些奇怪的现象。 如何解释以下结果: 代码在这里:
我想使用 html 模板。使用 Chrome 一切正常,但在 Firefox 中,模板元素没有任何内容......也许它只是没有显示在调试器中,但是当我尝试实例化模板的内容时,我也没有得到任何内容.
为什么以下在 IE11 中抛出 "Object doesn't support property or method 'importNode'"? 莫非是我的“文档模式”?我处于“文档模式”7.
我是一名优秀的程序员,十分优秀!