簡體   English   中英

從XML提取標簽名稱,屬性,值和文本上下文

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM