我使用Visual Studio 2017,正在学习使用Expat(目前没有选择使用其他XML解析库),目的是编写一个函数,该函数将接收嵌套在XML标签中的标签,并检索其中一个标签的字符串内容。
所以,如果XML看起来像这样。
<doc>
<aa>bla</aa>
<bb>
<cc>cookie</cc>
<dd>dog</dd>
<ee>easy</ee>
</bb>
<foo>bar</foo>
</doc>
我的函数就会收到这样的内容。
<cc>cookie</cc>
<dd>dog</dd>
<ee>easy</ee>
而这个函数也会接收我们想要的标签的名称 所以如果这个标签是我的函数就会返回 "狗"。
我对C++有些陌生,对C语言完全没有经验。我在Stack Overflow这里找到了三个不同的代码样本,它们基本上继承了Expat的 概要.c. 样本来自 这个, 这个 和 这个 帖。
当我运行这三个截然不同的样本中的代码样本时,我得到了同样的现象--在这三个样本中,我没有打印出标签的全名或标签的全部内容,而是只打印了标签的第一个字符或字符串。
比如说 此职位 把这个XML。
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
并打印出
-- Note --<br>
To: Tove<br>
From: Jani<br>
Heading: Reminder<br>
Message: Don't forget me this weekend!<br>
<br>
当我用同样的XML运行本帖的代码样本时,得到的是。
T<br>
J<br>
R<br>
D<br>
<br>
起初我以为一定是代码样本出了问题 所以就直接进入下一个样本了 但这是一致的,所以一定是我的设置有问题。我怕自己经验不足,不知道是什么地方出了问题。
先谢谢你了。
问题是,我以为我会使用Expat的支持unicode的dlls,因为那是我会准备好迎接任何可能出现的情况。于是expat在每个元素或标签内容中读取第一个字符中的第二个字节,并认为它的空洞意味着这就是整个事情的结束,然后继续前进。