[英]Extracting tag names, attributes, values and text context from XML
我想從給定的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>
我希望我的代碼返回所有標簽名稱,屬性,值和文本內容。 例如:標簽名稱:講師,職稱,姓名,課程,officeHours。 職位:學位,年份,學校,級別。 值:phd,2012,USC。 文字:教授,名字,姓氏,10。
如何在C#中執行此操作。
給定根 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);
}
}
重新排序最后兩個循環將更改值的順序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.