libxml的使用(2)--读取节点属性 http://blog.youkuaiyun.com/hdutigerkin/article/details/7546907

本文介绍如何使用libxml库中的xmlGetProp函数从XML文件的指定节点提取属性值,并通过示例代码展示了如何获取名为node2的节点的attribute属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

libxml的使用(2)--读取节点属性

  1437人阅读  评论(0)  收藏  举报

在上一篇文章当中,我读取了各个节点的名字和内容,现在我将读取各个节点的属性。

[html]  view plain copy print ?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <root>  
  3. <node1>content1</node1>  
  4. <node2 attribute="yes">content2</node2>  
  5. <node3>  
  6. <subnode>go</subnode>  
  7. </node3>  
  8. </root>  

这是上一篇文章中提到的xml文件。

在node2这个节点上有一个属性attribute,其值是yes。我们可以使用xmlGetProp这个函数将其提取出来。这个函数包含了两个变量,一个是将要提取属性的节点指针xmlNodePtr,另一个是属性的名称。

  1. xmlChar* attr_value = NULL;  
  2. if(!xmlStrcmp(node->name, (const xmlChar*)"node2")) {  
  3.     attr_value = xmlGetProp(node, "attribute");  
  4.     printf("attribute value:%s\n",attr_value);  
  5.     xmlFree(attr_value);  
  6. }  
这样我们就提取出了yes这个字符串了!
Reading package lists... Done Building dependency tree... Done Reading state information... Done The following additional packages will be installed: libtext-unidecode-perl libxml-libxml-perl libxml-namespacesupport-perl libxml-sax-base-perl libxml-sax-expat-perl libxml-sax-perl tex-common Suggested packages: libxml-sax-expatxs-perl debhelper texlive-base texlive-latex-base texlive-plain-generic texlive-fonts-recommended The following NEW packages will be installed: libtext-unidecode-perl libxml-libxml-perl libxml-namespacesupport-perl libxml-sax-base-perl libxml-sax-expat-perl libxml-sax-perl tex-common texinfo 0 upgraded, 8 newly installed, 0 to remove and 370 not upgraded. Need to get 2,426 kB of archives. After this operation, 15.1 MB of additional disk space will be used. Do you want to continue? [Y/n] y Err:1 http://http.kali.org/kali kali-rolling/main amd64 tex-common all 6.17 404 Not Found [IP: 54.39.128.230 80] Err:2 http://http.kali.org/kali kali-rolling/main amd64 libtext-unidecode-perl all 1.30-1 404 Not Found [IP: 54.39.128.230 80] Err:3 http://http.kali.org/kali kali-rolling/main amd64 libxml-namespacesupport-perl all 1.12-1.1 404 Not Found [IP: 54.39.128.230 80] Err:4 http://http.kali.org/kali kali-rolling/main amd64 libxml-sax-base-perl all 1.09-1.1 404 Not Found [IP: 54.39.128.230 80] Err:5 http://http.kali.org/kali kali-rolling/main amd64 libxml-sax-perl all 1.02+dfsg-3 404 Not Found [IP: 54.39.128.230 80] Err:6 http://http.kali.org/kali kali-rolling/main amd64 libxml-libxml-perl amd64 2.0134+dfsg-2+b1 404 Not Found [IP: 54.39.128.230 80] Err:7 http://http.kali.org/kali kali-rolling/main amd64 libxml-sax-expat-perl all 0.51-1 404 Not Found [IP: 54.39.128.230 80] Err:8 http://http.kali.org/kali kali-rolling/main amd64 texinfo amd64 6.8-3 404 Not Found [IP: 54.39.128.230 80] E: Failed to fetch http://http.kali.org/kali/pool/main/t/tex-common/tex-common_6.17_all.deb 404 Not Found [IP: 54.39.128.230 80] E: Failed to fetch http://http.kali.org/kali/pool/main/libt/libtext-unidecode-perl/libtext-unidecode-perl_1.30-1_all.deb 404 Not Found [IP: 54.39.128.230 80] E: Failed to fetch http://http.kali.org/kali/pool/main/libx/libxml-namespacesupport-perl/libxml-namespacesupport-perl_1.12-1.1_all.deb 404 Not Found [IP: 54.39.128.230 80] E: Failed to fetch http://http.kali.org/kali/pool/main/libx/libxml-sax-base-perl/libxml-sax-base-perl_1.09-1.1_all.deb 404 Not Found [IP: 54.39.128.230 80] E: Failed to fetch http://http.kali.org/kali/pool/main/libx/libxml-sax-perl/libxml-sax-perl_1.02%2bdfsg-3_all.deb 404 Not Found [IP: 54.39.128.230 80] E: Failed to fetch http://http.kali.org/kali/pool/main/libx/libxml-libxml-perl/libxml-libxml-perl_2.0134%2bdfsg-2%2bb1_amd64.deb 404 Not Found [IP: 54.39.128.230 80] E: Failed to fetch http://http.kali.org/kali/pool/main/libx/libxml-sax-expat-perl/libxml-sax-expat-perl_0.51-1_all.deb 404 Not Found [IP: 54.39.128.230 80] E: Failed to fetch http://http.kali.org/kali/pool/main/t/texinfo/texinfo_6.8-3_amd64.deb 404 Not Found [IP: 54.39.128.230 80] E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing? ┌──(root💀kali)-[/home/kali]
最新发布
06-11
<think>我们正在解决的是KaliLinux中使用apt安装软件时出现404NotFound错误的问题。从之前的对话中,我们得知用户在安装info包时遇到了404错误,并且尝试了更新和修复,但问题依旧存在。根据引用内容,我们可以推测可能的原因包括软件源配置问题、包名称错误或缓存问题等。结合引用[1]和[2],我们知道KaliLinux基于Debian,使用APT作为包管理器。引用[3]提到KaliLinux中add-apt-repository的默认设置可能不工作,这暗示了软件源配置的重要性。解决方案步骤:1.**更新软件源列表**:首先确保软件源是最新的,这可以解决因索引过期导致的404错误。2.**检查软件源配置**:确认/etc/apt/sources.list中的软件源地址是否正确。KaliLinux应该使用kali-rolling源。3.**清理APT缓存**:损坏的缓存可能导致无法获取正确的软件包信息。4.**安装正确的软件包**:在之前的尝试中,我们得知info包实际上包含在texinfo中,所以应安装texinfo。5.**验证软件源可用性**:尝试访问软件源URL,确保网络连接正常且软件源地址有效。接下来,我们按照这些步骤详细说明。注意:在回答中,我们不需要提及引用的具体内容,而是将其自然融入解决方案中。同时,生成相关问题供用户扩展思考。</think> ### Kali Linux APT安装出现404 Not Found错误解决方案 404错误通常由软件源配置或缓存问题导致,请按以下步骤排查: --- #### 🔍 1. **验证软件源配置** 修改`/etc/apt/sources.list`,确保使用官方**kali-rolling**源(当前Kali Linux的标准源): ```bash sudo nano /etc/apt/sources.list ``` *正确配置示例*: ```conf deb http://http.kali.org/kali kali-rolling main non-free contrib ``` 保存后执行: ```bash sudo apt update # 重建源索引 ``` > 📌 若更新时报错,说明网络访问受阻,可尝试改用HTTPS源: > `deb https://http.kali.org/kali kali-rolling main non-free contrib`[^3] --- #### 🔄 2. **清除APT缓存** 解决因缓存损坏导致的404问题: ```bash sudo apt clean # 清除下载的包文件 sudo rm -rf /var/lib/apt/lists/* # 删除索引缓存 sudo apt update --fix-missing # 强制重建索引 ``` --- #### 🛠 3. **安装基础包管理器组件** 若仍报错`add-apt-repository command not found`(引用[1]): ```bash sudo apt install software-properties-common ``` 此包提供源管理工具,修复软件源相关功能[^1]。 --- #### ⚙️ 4. **安装正确包名** Kali中`info`命令的实际包名为**texinfo**(非`info`): ```bash sudo apt install texinfo ``` 验证安装: ```bash info --version # 应输出:info (GNU texinfo) X.X.X ``` --- #### 🌐 5. **检查网络连通性** 验证是否能访问软件源: ```bash curl -I http://http.kali.org/kali # 应返回HTTP 200 ping -c 4 http.kali.org # 测试域名解析 ``` 若超时,需排查防火墙/DNS设置。 --- > ✅ **技术背景**:404错误本质是APT无法在配置的源中找到软件包索引。Kali滚动更新版需用`kali-rolling`源,旧版(`kali-last-snapshot`等)已废弃[^1][^3]。 --- ### 相关问题 1. **如何修复Kali中其他包的404错误?例如`apt install nmap`报错?** 2. **Kali Rolling源与其他Linux发行版(如Ubuntu)的软件源有何差异?** 3. **Kali Linux更新后出现依赖冲突如何解决?** 4. **哪些工具可诊断APT软件源连通性问题?**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值