Выбор узла комментария XML с помощью MSXML

В настоящее время я не могу получить доступ к содержанию каких-либо комментариев в XSD, из которых я пытаюсь прочитать.

Вот фрагмент XSD, из которого я пытаюсь прочитать комментарии:

<xs:schema>
    <xs:complexType name="typeName">
        <xs:choice>
            <xs:element name="elementName" type="someOtherType"><!--This is a comment I would like to access.--></xs:element>
        </xs:choice>
    </xs:complexType>
</xs:schema>

Я использую VB.Net. Вот фрагмент класса, который пытается получить доступ к комментарию XML из приведенного выше XSD:

Public Class QAutoTestXSD

    Private XML As MSXML2.DOMDocument60

    Public Sub New()
        XML = New MSXML2.DOMDocument60
        Call XML.setProperty("SelectionNamespaces", "xmlns:xs='http://www.w3.org/2001/XMLSchema'")
        XML.async = False
        If Not XML.load("C:\myXML.xml") Then
            Call handleParsingError
        End If
    End Sub

    Public Function getXSDComment(typeName As String, elementName As String) As String
        getXSDComment = XML.selectSingleNode("/xs:schema/xs:complexType[@name='" & typeName & "TestType']/xs:choice/xs:element[@name='" & elementName & "']/comment()").nodeValue
    End Function

End Class

Изменив аргумент XPATH для selectSingleNode, я могу успешно получить доступ ко всем другим типам узлов в XSD, однако мне еще предстоит успешно выбрать какие-либо узлы типа комментария, даже используя «// comment ()». Любая помощь приветствуется!


person ssalbdivad    schedule 23.06.2014    source источник
comment
возможный дубликат Доступ к комментариям в XML с помощью XPath   -  person Tony Hopkinson    schedule 23.06.2014
comment
Метод loadXML принимает строку с разметкой XML, а не имя файла. И почему вы используете MSXML с .NET, System.Xml.XmlDocument или System.Xml.Linq.XDocument - это чисто управляемые реализации. Также //comments() должен выдать ошибку XPath, проверка узла - единственное число //comment().   -  person Martin Honnen    schedule 23.06.2014
comment
@MartinHonnen Я уверен, что вы понимаете, весь код - это всего лишь макет. Прошу прощения за две указанные вами ошибки, я исправлю их, однако этих проблем не было в исходном коде. Что касается MSXML, я перевожу устаревший VBA на VB.Net и хотел бы сохранить как можно больше старой кодовой базы, чтобы ускорить переход.   -  person ssalbdivad    schedule 23.06.2014
comment
@TonyHopkinson Мне известен этот вопрос, однако принятый ответ идентичен методу, который я безуспешно пытался использовать.   -  person ssalbdivad    schedule 23.06.2014


Ответы (1)


Подумайте о том, чтобы опубликовать минимальный, но полный образец, позволяющий воспроизвести проблему. Когда я использую

Module Module1

    Sub Main()
        Dim doc As MSXML2.DOMDocument60 = New MSXML2.DOMDocument60
        If doc.load("XMLFile1.xml") Then
            doc.setProperty("SelectionNamespaces", "xmlns:xs='http://www.w3.org/2001/XMLSchema'")
            Dim comment As MSXML2.IXMLDOMComment = doc.selectSingleNode("//xs:element//comment()")
            If comment IsNot Nothing Then
                Console.WriteLine(comment.nodeValue)
            End If
        End If
    End Sub

End Module

где XMLFile1.xml

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="typeName">
    <xs:choice>
      <xs:element name="elementName" type="someOtherType">
        <!--This is a comment I would like to access.-->
      </xs:element>
    </xs:choice>
  </xs:complexType>
</xs:schema>

затем программа (скомпилированная с VS 2012 как приложение .NET 4.5) выводит «Это комментарий, к которому я хотел бы получить доступ».

person Martin Honnen    schedule 23.06.2014
comment
Спасибо, Мартин, все работает нормально. Проблема закончилась тем, что мои ресурсы VS не обновлялись должным образом, поэтому были полностью внешними по отношению к тому, что было опубликовано. Мне кажется, что на данный момент мой вопрос не имеет значения, не лучше ли мне просто удалить его? - person ssalbdivad; 23.06.2014
comment
Да, вы можете удалить это. - person Martin Honnen; 23.06.2014