Microsoft XmlLite не может обнаружить конец элемента

Я использую Microsoft XmlLite DLL для анализа простого XML-файла, используя код в примере XmlLiteReader. Важная часть кода (C++)

    while(S_OK == (hr = pReader->Read(&nodeType)))
    {
        switch(nodeType)
        {
        case XmlNodeType_Element:
            // Get name...
            WriteAttributes(pReader, es, attributes);
            break;
        case XmlNodeType_EndElement:
            // Process end-of-element...
            break;
    }

а также

HRESULT WriteAttributes(IXmlReader* pReader, CString& es, StringStringMap& attributes)
{
    while(TRUE)
    {
        // Get and store an attribute...
        HRESULT hrMove = pReader->MoveToNextAttribute();
    }
    // ...
}

Итак, вот мой вопрос. С вводом XML, таким как

<?xml version="1.0" encoding="utf-8"?>
<settings version="1.2">
 <runID name="test" mode="N" take_data="Y">
  <cell id="01">
   <channel id="A" sample="something"/>
   <channel id="B" sample="something else"/>
  </cell>
  <cell id="03">
   <channel id="A" sample="other something"/>
   <channel id="B" sample="other something else"/>
  </cell>
 </runID>
</settings>

Все работает как положено, за исключением того, что /> в конце каждого channel строка, обозначающая конец элемента channel, не распознается как конец элемента. Последующие типы узлов следующие channel пробел (\n), затем элемент (второй channel).

Как я могу определить из XmlLite, что элемент `channel'закончился? Или я неправильно понимаю синтаксис XML?

1 ответ

Вы можете проверить, заканчивается ли элемент /> с помощью функции IsElementEmpty.

Другие вопросы по тегам