注意: - 它可能是使用VBA问题的迭代XML节点。请看这个问题的底部。如果我们可以在不使用MSXML2.DOMDocument
的情况下进行迭代,那就太好了我看到了this问题,该问题回答了关于如何检索CustomXMLPart的部分问题。但是,我无法遍历Xml。这样,这可能不是特定于CustomXmlPart,它可能是使用VBA问题的迭代XML。以下是我在CustomXMLPart中的XML。
<Items>
<Item1>Item1</Item1>
<Item2>Item2</Item2>
<Item3>Item3</Item3>
</Items>
这就是我将上述XML添加为CustomXmlPart的方法: -
static void AddCustomTableXmlPart(WordprocessingDocument document)
{
MainDocumentPart mainDocumentPart = document.MainDocumentPart;
XDocument itemXml = GetItemsAsCustomXML();
if (mainDocumentPart.GetPartsCountOfType<CustomXmlPart>() > 0)
mainDocumentPart.DeleteParts<CustomXmlPart>(mainDocumentPart.CustomXmlParts);
//Add a new customXML part and then add content
var customXmlPart = mainDocumentPart.AddCustomXmlPart(CustomXmlPartType.CustomXml);
//copy the XML into the new part...
using (var ts = new StreamWriter(customXmlPart.GetStream()))
{
ts.Write(itemXml.ToString());
ts.Flush();
}
}
这就是我在宏中访问它的方式: -
Dim itemNode As xmlNode
Dim itemChildren As XMLNodes
'以下行引发运行时错误'运行时错误'13' - '类型不匹配'不确定原因。
**Set itemChildren= ActiveDocument.CustomXMLParts(ActiveDocument.CustomXMLParts.Count).SelectSingleNode("//Items").ChildNodes**
有趣的是,当我快速观看 ActiveDocument.CustomXMLParts(ActiveDocument.CustomXMLParts.Count).SelectSingleNode(“// Items”)。ChildNodes 时,我会在快速监视窗口中看到子项。对itemChildren变量的赋值是否不正确?
我想遍历所有项目并获取所有项目的文本。有人可以帮忙吗?
答案 0 :(得分:2)
好的,我就是这样做的。发布以防万一对某人有用。显然,您不需要使用“CustomXMLNodes”对象。这仍然可以使用SelectNodes完成。以下功能显示了这一点。另外,在将项目添加到列表时,我没有检查空字符串。
Sub LoadItems()
Dim totalItemsCount As Integer
totalItemsCount = ActiveDocument.CustomXMLParts(ActiveDocument.CustomXMLParts.Count).SelectNodes("//Items")(1).ChildNodes.Count
Dim item As String
For i = 1 To totalItemsCount
item = ActiveDocument.CustomXMLParts(ActiveDocument.CustomXMLParts.Count).SelectNodes("//Items")(1).ChildNodes(i).text
item = Replace(item, " ", Empty)
If Len(item) > 1 Then
ItemUserControl.lstItems.AddItem pvargItem:item
End If
Next i
End Sub
答案 1 :(得分:0)
使用:
Dim itemChildren CustomXMLNodes
答案 2 :(得分:0)
我认为您收到类型不匹配错误的原因是因为ChildNodes
返回IXMLDOMNodeList
而不是XMLNodes
。
请尝试Dim itemChildren As IXMLDOMNodeList
。
http://msdn.microsoft.com/en-us/library/ms757053(v=vs.85).aspx