小编Alb*_*ert的帖子

如何使用 libxml C 库获取 XML 中的属性?

某项任务要求我解析 XML 文件并检查每个节点及其属性。我花了几周时间学习 XML 和 XML 解析。我什至接受了之前发布的与 C 中的 LIBXML 解析相关的问题的帮助,并基于这种理解我编写了下面的代码。但这段代码是有缺陷的,因为我没有实现目标。

我想我搞乱了一些父母、孩子和兄弟姐妹的概念。我从下面提到的 XML 文件中了解到的是:

Profile 是根节点,Catalog 是其子节点,Catalog 的子节点作为参数,Parameter 的子节点作为目标节点,并且所有目录节点彼此互为兄弟节点。

Profile--> Catalog--> Parameter-->Target
       |-> Catalog--> Parameter-->Target
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试通过将指针移动到目录子节点指针来从目录转到参数时,我无法进行。由于我无法达到参数,我无法达到目标。

希望纠正我的理解和代码。PS 我的要求是用 C 语言编写代码,所以请不要向我指出其他语言。

/***** MY XML FILE ***************************/

<?xml version="1.0" encoding="UTF-8"?>
<!-- When VIOS level changes, the value of ioslevel needs to change  manually -->
<Profile origin="get" version="3.0.0" date="2012-10-05T00:00:00Z">
 <Catalog1 id="devParam" version="3.0">
  <Parameter1 name="policy" value="single" applyType="boot" reboot="true">
   <Target1 class="device" instance="disk1"/>
  </Parameter1>
 </Catalog1>
 <Catalog2 id="devParam" version="3.0">
  <Parameter2 name="policy" value="no" applyType="boot">
   <Target2 class="device" instance="disk2"/>
  </Parameter2> …
Run Code Online (Sandbox Code Playgroud)

c xml libxml2 xml-parsing

5
推荐指数
1
解决办法
2733
查看次数

为什么 x86 跳转/调用指令使用相对位移而不是绝对目标?

我正在学习 8086,有一个特别的问题困扰着我,我还没有找到任何令人满意的答案。

我知道 CPU 按顺序执行代码,如果想要更改代码流,我们希望 IP 指向我们感兴趣的代码所在的新/旧地址。

现在,我的问题是为什么我们(我的意思是 CPU)在遇到跳转指令时不只是使用与标签对应的地址来更新 IP?

当我们遇到跳转指令时,需要在IP中添加位移吗?

在我看来

  1. 计算位移(即跳转标签到跳转后下一条指令的距离)和
  2. 然后取那个位移 2 的恭维,
  3. 最终被添加到 IP 中,以便 IP 指向标签指向的地址/指令

对我来说,这听起来像是更多的工作,然后只需使用与标签对应的地址更新 IP。但是,我确信事情的处理方式一定是有原因的,只是我不知道。

在 8086 中选择这种设计的原因是什么?

x86 assembly cpu-architecture x86-16

4
推荐指数
1
解决办法
4222
查看次数

标签 统计

assembly ×1

c ×1

cpu-architecture ×1

libxml2 ×1

x86 ×1

x86-16 ×1

xml ×1

xml-parsing ×1