我想从给定的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>
&#13;
我希望我的代码返回所有标记名称,属性,值和文本内容。 例如:标签名称:讲师,职称,名称,课程,办公室时间。 attibutes:学位,年份,学校,水平。 值:博士,2012年,南加州大学。 text:professor,firstName,LastName,10。
如何在C#中执行此操作。
答案 0 :(得分:0)
给定 root XElement,从以下内容获得:
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);
}
}
重新排序最后两个循环将改变值的顺序。