0

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

并且该函数还将接收我们想要其内容的标签的名称,因此如果标签是我的函数将返回“dog”。

我对 C++ 有点陌生,完全没有使用 C 的经验。我在 Stack Overflow 中找到了三个不同的代码示例,它们基本上继承自 Expat 的outline.c。样本来自thisthisthis post。

当我从这三个非常不同的示例中运行代码示例时,我得到了相同的现象 - 而不是打印出标签的全名或标签的完整内容,在所有三个示例中打印的唯一内容是标签或字符串的第一个字符。

例如,这篇文章采用了这个 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>

起初我认为代码示例一定有问题,然后就转到下一个示例。但这是一致的,所以我的设置一定有问题。恐怕我太缺乏经验了,不知道那是什么问题。

提前致谢。

4

1 回答 1

1

问题是我认为我会使用 Expat 的支持 unicode 的 dll,因为那是我会为任何可能发生的事情做好准备。因此 expat 读取了每个元素或标签内容的第一个字符中的第二个字节,并认为它的空虚意味着这就是整个事情的结束并继续前进。

于 2020-05-25T07:58:16.947 回答