使用tinyXML2库

时间:2016-06-20 07:08:12

标签: html c++11 tinyxml2

我有一个带有Javascript的HTML文件。但我无法使用tinyXML2库加载此HTML文件。它给出了错误。

我的html文件类似于abc.html



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
  <title>HTML Course</title>
  <style type="text/css">
ul.LinkedList { display: block; }
/* ul.LinkedList ul { display: none; } */
.HandCursorStyle { cursor: pointer; cursor: hand; }  /* For IE */
  </style>

  <script type="text/JavaScript">
function addEvents() {
      activateTree(document.getElementById("LinkedList1"));
    }
    function activateTree() 
	{
       for(var i=0; i < oList.getElementsByTagName("ul").length; i++) 
	   {
        oList.getElementsByTagName("ul")[i].style.display="none";            
      }                                                                  
       if(oList.addEventListener) 
	   {
        oList.addEventListener("click", toggleBranch, false);
      }
	  else if(oList.attachEvent) 
	  { 
        oList.attachEvent("onclick", toggleBranch);
      }
       addLinksToBranches(oList);
    }
  </script>
</head>

	<body >
<ul id="LinkedList1" class="LinkedList">
  <li>History of WWW
    <ul>
      <li>Arpanet - Packets - 1969</li>
      <li>TCP/IP - Vinton Cerf - 1974</li>
      <li>WorldWideWeb (Internet and program) - Tim Berners Lee - 1991</li>
      <li>Public Domain WWW source code - 1993</li>
      <li>NCSA Mosaic released - 1993</li>
      <li>Opera released - 1994</li>
      <li>Marc Anderseen (formerly NCSA) and Jim Clark  release Netscape - 1994</li>
      <li>IE from Microsoft (based on Mosaic)
        <ul>
          <li>DHTML</li>
          <li>ActiveX</li>
        </ul>
      </li>
      <li>W3C at MIT (CERN, NCSA, EU)</li>
      <li>W3C Recommendations</li>
      <li>Mozilla Foundation</li>
    </ul>
  </li>

</ul>
</body>
</html>
&#13;
&#13;
&#13;

我加载这个html文件的c ++代码是:

tinyxml2::XMLDocument xmlDoc;
tinyxml2::XMLError err =  xmlDoc.LoadFile("abc.html");

现在err的错误代码为XML_ERROR_PARSING_ELEMENT

我想要做什么这个HTML文件是在<ul>标记下找到一个特定标记<body>,并希望在该标记内添加更多项目。

请让我知道它为什么会出错,我该怎么办呢。

1 个答案:

答案 0 :(得分:1)

这一行是你的问题:

year    groups  element         budgetFebruary  actualFebruary  varianceFebruary    percentFebruary budgetJanuary   actualJanuary   varianceJanuary percentJanuary
2016    CCARE   Basic           152.28          3.00            4.98                0.00            52.28           43.00           43.98           0.00
2016    CCARE   Bonuses         12.77           1.10            -4.12               0.00            1.77            17.10           -46.12          .00
2016    CCARE   Comminication   191.01          2.34            -1.98               0.00            19.01           27.34           -81.98          0.00
2016    CCARE   HDMF            10.98           2.17            -2.98               0.00            0.98            22.17           -22.98          0.00
2016    CCARE   Overtime        23.34           3.20            0.98                0.00            2.34            20.20           7.98            0.00

XML解析器将小于比较解释为元素的开头,但由于它后面没有合法的元素名称,解析器会因为它不常而惹恼你。

for(var i=0; i < oList.getElementsByTagName("ul").length; i++) 部分中包装脚本标记的内容;使用<![CDATA[]]>转义它,或者翻转比较,使其成为&lt;

>=

由于元素名称后面的空格可能也会导致问题,尽管它不应该。 (它是有效的XML,但不是每个解析器都完全兼容。)

修改

Garf指出;将XML和JS以及CSS分开是很好的,这正是原因。

您在XML序列化中需要的是:

    <body >