【问题标题】:vb.net reading xml file with elements in <>vb.net 读取带有 <> 元素的 xml 文件
【发布时间】: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 这解决了我的问题,谢谢!

标签: xml vb.net vsto


【解决方案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);

【讨论】:

  • 谢谢这绝对有帮助,我知道这很简单,我只是找不到它。我的问题仍然存在,但是使用您的代码,因为我似乎无法选择一个节点。请参阅上面的编辑,了解我尝试做的事情没有成功
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-07
  • 2017-12-16
  • 2012-09-09
  • 1970-01-01
  • 2019-12-28
相关资源
最近更新 更多