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.