从XML中提取标记名称、属性、值和文本上下文
本文关键字:属性 上下文 文本 XML 提取 | 更新日期: 2023-09-27 18:28:20
我想从给定的xml字符串中提取所有元素标记名称、属性、值和文本内容。
例如:
<instructor >
<title degree= “PhD” year = “2012” school = “USC”>Professor</title>
<name>
<first>FirstName</first>
<last>LastName</last>
</name>
<course level = “Junior”>XML</course>
<officeHours>10</officeHours>
</instructor>
我希望我的代码返回所有标签名称、属性、值和文本内容。例如:标签名称:讲师,职称,姓名,课程,办公时间。属性:学位、年份、学校、级别。数值:博士,2012年,南加州大学。text:教授,名字,姓氏,10。
如何在C#中做到这一点。
给定rootXElement,从以下内容获得:
var root = XElement.Parse(myXmlString);
并且预先初始化Dictionary<string, List<string>>
(相当于HashMap),下面的函数将完成您需要的操作:
static void TraverseXElement(XElement elem, Dictionary<string, List<string>> aggregation)
{
const string valuesKey = "Values";
const string tagNameKey = "Tag Name";
const string attributesKey = "Attributes";
aggregation[tagNameKey].Add(elem.Name.LocalName);
foreach (var childText in elem.Nodes().OfType<XText>())
{
//immediate values, even in case of wrongly formed XML
aggregation[valuesKey].Add(childText.Value);
}
foreach (var element in elem.Elements())
{
TraverseXElement(element, aggregation);
}
foreach (var attr in elem.Attributes())
{
aggregation[attributesKey].Add(attr.Name.LocalName);
aggregation[valuesKey].Add(attr.Value);
}
}
对最后两个循环重新排序将更改值的顺序。