【发布时间】:2017-07-23 20:20:57
【问题描述】:
我正在尝试使用 vb.net 编辑 XML 文件。此 XML 文件用于功能区中的 Microsoft Outlook 添加。我希望能够编辑代码,以便用户可以将按钮添加到我的插件(他们的版本)我对 VB 和 xml 有点陌生,我似乎无法找到如何做到这一点。这是我当前的问题。
我可以读取和修改类似这样的文件。
<?xml version="1.0" encoding="UTF-8"?>
<customUI>
<ribbon>
<tabs>
<tab>
<group>
<button>
</button>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
但只要我添加“元素?”在节点 我似乎无法编辑。下面是我似乎无法弄清楚如何编辑的 xml。
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
<ribbon>
<tabs>
<tab idMso="TabAddIns">
<group>
<button id="Add" label="AddNode" getImage="GetImage" onAction="RunAdd" visible="true" size="large" screentip="Add an XML file Node" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
这是我尝试过的 1. 我试图重写我的 xml 代码,所以除了节点名称之外, 中没有任何内容。这导致我的按钮出现错误,我似乎无法解决。 2.我目前的vb.net代码是这样的
Dim MyXMLNode As XmlNode
MyXMLNode= MyXML.SelectSingleNode("/customUI/ribbon")
WriteLine("Hello World2")
If MyXMLNode IsNot Nothing Then
WriteLine("Hello World")
MyXMLNode.InnerText = "CreateTeset"
Else
WriteLine("Hello World3")
'Do whatever
End If ' Save the Xml.
此代码可用于编辑第一个 XML,但不能编辑第二个。
根据 writeline,我知道问题出在这一行,因为 Hello World 不是输出,但 Hello World2 和 3 是。
MyXMLNode= MyXML.SelectSingleNode("/customUI/ribbon")
我尝试了类似这样的代码(请注意,我不确定下面的代码是否正确,因为我找不到从中获取它的页面以进行确认。不过,当我使用它时它应该是正确的。
MyXMLNode= MyXML.SelectSingleNode("/customUI/ribbon['element']")
我已经搜索过,但找不到任何人试图像这样读取 XML。我也愿意重写 XML。任何帮助表示赞赏。
这也是我想要做的。我希望能够添加/删除/编辑按钮组和选项卡。一个例子是我想将按钮的标签从“某物”更新为“其他东西”
编辑: 例如,如何选择 customUI 节点来编辑 xmlns
这是我尝试过的
Dim MyXMLNode As XmlNode = MyXML.SelectSingleNode("/customUI")
Dim strValue As String = MyXMLNode.Attributes("xmlns").Value 'retursn "Add"
WriteLine("Hello World2" & strValue)
If MyXMLNode IsNot Nothing Then
WriteLine("Hello World")
MyXMLNode.Attributes("xmlns").Value = "CreateTest"
Else
WriteLine("Hello World3")
'Do whatever
End If ' Save the Xml.
我在第二条暗线出现错误,因为第一条暗线没有做任何事情(即它返回一个空节点)
【问题讨论】:
-
我注意到的主要区别是根元素上的默认命名空间声明
xmlns="http://schemas.microsoft.com/office/2009/07/customui"。您必须调整传递给SelectSingleNode的 XPath 表达式以使用前缀,并将XmlNamespaceManager绑定到 XML 中使用的命名空间。 -
你能举个例子吗?我很抱歉,但我对这个词汇并不熟悉。 (没有正式的代码背景)
-
首先查看文档中的示例,它完全涵盖了默认命名空间 msdn.microsoft.com/en-us/library/4bektfx9(v=vs.110).aspx 的情况,说“如果您的 XML 包含默认命名空间,您仍然必须向 XmlNamespaceManager 添加前缀和命名空间 URI ; 否则,您将不会选择任何节点"
-
@MartinHonnen 这解决了我的问题,谢谢!