2017-03-03 95 views
1

我正在尝试使用vb.net编辑XML文件。这个XML文件是用于功能区中的一个miscrosoft outlook添加。我想能够编辑代码,以便用户可以将按钮添加到我的插件(他们的版本)我对VB和XML一般来说有点新,我似乎无法找到如何做到这一点。这是我目前的问题。vb.net阅读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的我知道问题是与这条线,因为你好世界不输出,但你好世界2和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. 

我会在第二暗淡行的错误,因为第一个朦胧线没有做任何事情(即它返回一个空节点)

+1

我注意到的主要区别是默认的命名空间声明'的xmlns =“HTTP:/ /schemas.microsoft.com/office/2009/07/customui“在根元素上。您必须调整传递给'SelectSingleNode'的XPath表达式来使用前缀,并将一个'XmlNamespaceManager'绑定前缀到XML中使用的名称空间。 –

+0

你能给我一个例子,我道歉,但我不是很熟悉这个词汇。 (没有正式的代码背景) – Gibbs314

+1

请先参阅文档中的示例,它完全覆盖了默认命名空间的情况https://msdn.microsoft.com/zh-cn/library/4bektfx9(v=vs.110).aspx说:“如果你的XML包含一个默认的命名空间,你仍然必须添加一个前缀和命名空间的URI到XmlNamespaceManager;否则,你将不会得到任何选择的节点” –

回答

1

有几种简单的方法可以做到这一点。 读属性:

Dim strValue as string = MyXMLNode.Attributes("id").Value 'retursn "Add" 

更改属性:

MyXMLNode.Attributes("id").Value = "My New Value" 

要添加一个新的按钮:

MyXMLNode= MyXMLNode.SelectSingleNode("/customUI/ribbon/tabs/tab[idMso='TabAddIns']/group") 

'Create a new node 
XmlElement elem = MyXMLNode.CreateElement("button"); 

'Create Attribute 
XmlAttribute typeAttr = xmlDoc.CreateAttribute("id"); 
typeAttr.Value = "Add"; 
elem.Attributes.Append(typeAttr); 

'Add more attributes here 

'Add the node to the document. 
MyXMLNode.AppendChild(elem); 
+0

感谢这绝对有帮助,我知道这将是简单的,我只是无法找到它。然而,我的问题仍然是使用你的代码,因为我似乎无法选择一个节点。看到我上面的编辑,我试图做不成功 – Gibbs314