VB.Net读取XML多标签问题:无法获取Font及ContentObject值
搞定XML里Font和ContentObject值的读取问题
嘿,我明白你现在的困境——能拿到Text的值,但Font和ContentObject的内容怎么都摸不到,明明知道要循环MAINTITLE的子节点,就是找不到正确的打开方式对吧?
首先我先模拟一个符合你描述的XML结构(毕竟你没贴具体代码,我先按常见的情况来):
<MAINTITLE> <Text>我的主标题</Text> <ContentObject Font="微软雅黑" FontSize="16"> <SubContent>一些嵌套内容</SubContent> </ContentObject> </MAINTITLE>
核心问题其实很简单:你需要先定位到ContentObject这个子节点,然后要么读取它的属性(比如Font),要么获取它内部的内容。下面给你两种常用语言的具体实现,你可以对着自己的代码改:
Python 方案(用xml.etree.ElementTree)
假设你已经能拿到MAINTITLE节点了,那接下来的操作就很顺:
import xml.etree.ElementTree as ET # 先解析你的XML文件 tree = ET.parse("你的XML文件路径.xml") root = tree.getroot() # 定位到MAINTITLE节点(如果结构更深,就调整find的路径,比如root.find(".//MAINTITLE")) maintitle_node = root.find("MAINTITLE") # 你已经会的读取Text值的部分 text_value = maintitle_node.find("Text").text print(f"Text内容: {text_value}") # 重点:获取ContentObject节点 content_obj_node = maintitle_node.find("ContentObject") if content_obj_node is not None: # 读取Font属性值 font_value = content_obj_node.get("Font") print(f"Font值: {font_value}") # 如果要读取ContentObject内部的子节点内容,比如SubContent sub_content = content_obj_node.find("SubContent").text print(f"ContentObject内部内容: {sub_content}")
C# 方案(用System.Xml.Linq)
如果是用C#开发,代码大概是这样:
using System.Xml.Linq; // 加载XML文件 XDocument xmlDoc = XDocument.Load("你的XML文件路径.xml"); // 找到第一个MAINTITLE节点 var maintitle = xmlDoc.Descendants("MAINTITLE").FirstOrDefault(); if (maintitle != null) { // 读取Text值 string textVal = maintitle.Element("Text")?.Value; Console.WriteLine($"Text内容: {textVal}"); // 获取ContentObject节点 var contentObj = maintitle.Element("ContentObject"); if (contentObj != null) { // 读取Font属性 string fontVal = contentObj.Attribute("Font")?.Value; Console.WriteLine($"Font值: {fontVal}"); // 读取ContentObject内部的子节点 string subContent = contentObj.Element("SubContent")?.Value; Console.WriteLine($"ContentObject内部内容: {subContent}"); } }
几个要注意的小细节:
- 如果
ContentObject不是MAINTITLE的直接子节点,而是嵌套在更深的层级里,那就要用递归查找的方式:Python里用maintitle_node.find(".//ContentObject"),C#里用maintitle.Descendants("ContentObject")。 - 如果有多个
ContentObject节点,那就需要循环遍历:Python用maintitle_node.findall("ContentObject"),C#用maintitle.Elements("ContentObject"),然后逐个处理每个节点的属性和内容。
内容的提问来源于stack exchange,提问作者DVELPR
相关产品推荐
相关产品推荐

