空元素导致 libxml 段错误

发布于 2024-11-04 17:43:04 字数 731 浏览 2 评论 0原文

我有一个 xml 文件,大致如下:

<root>
  <children>
    <child />
  </children>
  <otherchildren>
  </otherchildren>
  <morechildren>
    <child />
  </morechildren>
</root>

这是解析它的 C:

doc = xmlDocPtr;
doc = xmlParseFile(file);
cur = xmlNodePtr;
cur = xmlDocGetRootElement(doc);
cur = cur->xmlChildrenNode;

while (cur != NULL){ // Loop through children of root

    // Do my thing

    cur = cur->next;
}

当 xmlNodePtr 到达 otherchildren 时,因为没有内容,所以下一个节点(文本节点)为 NULL

这给我带来了一个问题,扰乱了我的循环,并以某种方式导致了段错误。

除了明显的 if 语句之外,我该如何解决这个问题? otherchildren 下面还有更多 xml,如果循环退出我就无法获取它。

I have an xml file that goes roughly like this:

<root>
  <children>
    <child />
  </children>
  <otherchildren>
  </otherchildren>
  <morechildren>
    <child />
  </morechildren>
</root>

And here's the C that parses it:

doc = xmlDocPtr;
doc = xmlParseFile(file);
cur = xmlNodePtr;
cur = xmlDocGetRootElement(doc);
cur = cur->xmlChildrenNode;

while (cur != NULL){ // Loop through children of root

    // Do my thing

    cur = cur->next;
}

When the xmlNodePtr comes to otherchildren, because there are no contents, the next node (the text node) is NULL

This gives me a problem, messes with my loop, and causes a segfault somehow.

How do I fix this other than the obvious if statement? There is more xml below otherchildren and I can't get it if the loop exits.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

锦爱 2024-11-11 17:43:04

使用您的 .xml,我得到:

./SOTrials ../Untitled1.xml 
../Untitled1.xml:10: parser error : expected '>'
</root>
^
error: could not parse file ../Untitled1.xml
Speicherzugriffsfehler

(Speicherzugriffsfehler = 内存错误)

将 .xml 更改为

...
</morechildren>
...

./SOTrials ../Untitled1.xml 
node type: Element, name: text
node type: Element, name: children
node type: Element, name: text
node type: Element, name: otherchildren
node type: Element, name: text
node type: Element, name: morechildren
node type: Element, name: text

看起来您的代码比您的 xml 更好。

Using your .xml, I get:

./SOTrials ../Untitled1.xml 
../Untitled1.xml:10: parser error : expected '>'
</root>
^
error: could not parse file ../Untitled1.xml
Speicherzugriffsfehler

(Speicherzugriffsfehler = memory fault)

Changing the .xml to

...
</morechildren>
...

gives:

./SOTrials ../Untitled1.xml 
node type: Element, name: text
node type: Element, name: children
node type: Element, name: text
node type: Element, name: otherchildren
node type: Element, name: text
node type: Element, name: morechildren
node type: Element, name: text

Looks like your code is better than your xml.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文