我想读取xml子子节点名称和值

时间:2014-01-01 13:55:42

标签: c# asp.net

任何朋友都可以帮忙解决这个问题。 现在我想在获得值时阅读完整的路径。

我想用C#读取XML中父节点,子节点,子子节点等的名称。 我之前不知道任何节点名称。尽可能帮助

<?xml version="1.0" encoding="UTF-8" ?>
<Element xsi:schemaLocation="http://localhost/AML/CaseInvestigationMangement/Moduli/XmlImportControls/xsdBorrow.xsd xsd2009027_kor21.xsd" Kod="370" xmlns="http://localhost/AML/CaseInvestigationMangement/Moduli/XmlImportControls/xsdBorrow.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
/2001/XMLSchema-instance">
    <ANode>
        <BNode>
            <CNode>
                <Example>
                    <Name>John</Name>
                    <NO>001</NO>
                </Example>
            </CNode>
        </BNode>
        <ID>1234</ID>
        <Date>2011-10-01</Date>
    </ANode>
    <ANode>
        <BNode>
            <CNode>
                <Example>
                    <Name>Mike</Name>
                    <NO>002</NO>
                </Example>
            </CNode>
        </BNode>
        <ID>5678</ID>
        <Date>2011-03-31</Date>
    </ANode>
</Element>

我想逐个读取每个节点,如阳极,bnode,cnode,Example,然后是name和NO。 现在我想在获得值时读取完整路径。请帮忙......

2 个答案:

答案 0 :(得分:0)

  

我想逐个阅读每个节点......

然后我建议您尝试使用XmlReader课程。以下代码段演示了读取节点名称和值的基本用法:

using (Stream fileStream = File.OpenRead("path to your xml file"))
{
    using (var reader = XmlReader.Create(fileStream))
    {
        while (reader.Read())
        {
            string indent= string.Join(string.Empty, Enumerable.Repeat(" ", reader.Depth));
            if (reader.NodeType == XmlNodeType.Element)
            {
                Console.WriteLine(indent+ reader.Name);
            }
            else if (reader.NodeType == XmlNodeType.Text)
            {
                Console.WriteLine(indent+ reader.Value);
            }
        }
    }
}

<强>输出

 Element  

  /2001/XMLSchema-instance">

 ANode  
  BNode  
   CNode  
    Example  
     Name  
      John  
     NO  
      001  
  ID  
   1234  
  Date  
   2011-10-01  
 ANode  
  BNode  
   CNode  
    Example  
     Name  
      Mike  
     NO  
      002  
  ID  
   5678  
  Date  
   2011-03-31  

希望这有帮助。

答案 1 :(得分:0)

您可以使用类似以下方法的内容

string GetHTMLOutputFromXML()
{
    StringBuilder output = new StringBuilder();
    XmlTextReader reader = null;
    try
    {
        //Get a reader
        reader = new XmlTextReader(ConfigurationManager.AppSettings["XMLPath"] + "XMLFile.xml");
        string elementName = "";
        while (reader.Read())
        {
            //For every node
            switch (reader.NodeType)
            {
                //If you happen upon an element mark down its name
                case XmlNodeType.Element:
                    elementName = reader.Name;
                    output.Append(elementName + " - ");
                    break;
                //If this is an element, use its value
                case XmlNodeType.Text:
                    output.Append( reader.Value + "<br/>");
                    break;
            }
            //You could also use the following code to get attribute values
            //if (reader.HasAttributes)
            //    output.Append(reader.GetAttribute("attr") + "<br/>");
        }
    }
    catch (Exception ex)
    {
        output.Append("Error while reading the xml file");
    }
    finally
    {
        // Close the reader.
        reader.Close();
    }


    return output.ToString();
}

在XML上使用此方法将返回

元素 - / 2001 / XMLSchema-instance“&gt; ANode - BNode - CNode - 示例 - 名称 - John NO - 001 ID - 1234 日期 - 2011-10-01 ANode - BNode - CNode - 示例 - 名称 - Mike NO - 002 ID - 5678 日期 - 2011-03-31

您可以更改代码以按照您希望的方式显示结果。

您还可以阅读有关基本XML操作的更多信息here