C++ Expat只打印标签中元素和数据的第一个字母。

问题描述 投票:0回答:1

我使用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>

起初我以为一定是代码样本出了问题 所以就直接进入下一个样本了 但这是一致的,所以一定是我的设置有问题。我怕自己经验不足,不知道是什么地方出了问题。

先谢谢你了。

c++ c xml-parsing expat-parser
1个回答
0
投票

问题是,我以为我会使用Expat的支持unicode的dlls,因为那是我会准备好迎接任何可能出现的情况。于是expat在每个元素或标签内容中读取第一个字符中的第二个字节,并认为它的空洞意味着这就是整个事情的结束,然后继续前进。

© www.soinside.com 2019 - 2024. All rights reserved.