Microsoft XmlLite无法检测到元素结尾

时间:2015-01-09 07:34:54

标签: xml-parsing 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的结尾,isn&# 39;被认为是元素的终结。 channel后面的连续节点类型是空格(\ n),然后是元素(第二个channel)。

如何从XmlLite中确定元素`channel&#39;结束了?或者我误解了XML语法?

1 个答案:

答案 0 :(得分:1)

您可以使用IsElementEmpty函数测试元素是否以/>结尾。