Получение Office.customeXMLparts без пространств имен

1

Я пытаюсь сохранить некоторые данные в файле Excel, используя компонент CustomXMLParts. Я тоже плохо себя чувствую.

У меня есть следующий код:

    Public Shared Sub AddSettingsXMLToDocument()

        Dim xmlPart As XElement =
            <SoftwareName xmlns="myNamespace">
                <Settings>
                    <FormVersion></FormVersion>
                    <FormPassword>"Password"</FormPassword>
                    <DatabaseRequiresAdminMode></DatabaseRequiresAdminMode>
                </Settings>
            </SoftwareName>

        Dim aWorkbook As Excel.Workbook = Globals.ThisAddIn.Application.ActiveWorkbook
        aWorkbook.CustomXMLParts.Add(xmlPart.ToString(), System.Type.Missing)
    End Sub


    Public Shared Function GetSettingsXMLFromDocument() As String
        Dim aWorkbook As Excel.Workbook = Globals.ThisAddIn.Application.ActiveWorkbook

        'GET THE ENTIRE THING
        Dim retrievedXMLParts As Office.CustomXMLParts = aWorkbook.CustomXMLParts.SelectByNamespace("myNamespace")
        Dim customXMLPart As Office.CustomXMLPart = retrievedXMLParts2.Cast(Of Office.CustomXMLPart)().FirstOrDefault()

        'TRYING TO GET A SPECIFIC FIELD
        Dim formField As Office.CustomXMLNode = customXMLPart2.SelectSingleNode("XpathExpression")
        If (Not IsNothing(formField)) Then _
            MsgBox("FINALLY GOT MY NODE!   " & vbNewLine & d1.XML)
        If (IsNothing(formField)) Then _
            MsgBox("ARG")
        Return FormField.XML
    End Function

Линейка, которая меня интересует: Dim formField As Office.CustomXMLNode = customXMLPart2.SelectSingleNode("XpathExpression")

Я довольно пробовал КАЖДУЮ вещь как выражение Xpath, и я получил нулевое значение для всего, кроме "*/".

Я также прочитал статью об пространствах имен, но он не будет работать с VSTO, поскольку Office.CustomXMLParts не позволит вам перегружать функцию параметром NamespaceManager. SelectSingleNode возвращает значение null для известного пути xml-узла с использованием XPath

Как я могу создать свои данные из Office.CustomXMLParts? Как обновить Workbook.CustomXMLParts?

Большое спасибо!

Редактировать: Я уезжаю на несколько дней. Я ценю ваш вклад много! К сожалению, я не смогу подтвердить какое-либо решение до моего возвращения.

Теги:
excel
xpath

1 ответ

0
Лучший ответ

Если вы действительно не можете найти способ зарегистрировать префикс пространства имен и использовать его в своем XPath, вы можете прибегнуть к игнорированию пространства имен и фильтрации узлов по его локальному имени. Например (форматируется для удобства чтения):

//*[local-name()='SoftwareName']
   /*[local-name()='Settings']
   /*[local-name()='FormPassword']
  • 0
    Спасибо! Оно работало завораживающе! Я не смог найти никакой информации о таком синтаксисе, поэтому мне придется делать домашнее задание по этому вопросу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню