c#XML解析将innerxml与innertext分离

c#XML解析将innerxml与innertext分离,c#,xml-parsing,C#,Xml Parsing,我想做的是创建一个理想的嵌套列表,基本上是一个2d列表,或者一个2d数组,如果这对这个任务更好的话,它可以按照如下方式工作,而不需要显式地选择节点 我可以使用SelectNode(Woods/Wood),然后执行类似于node[“ID”]的操作。InnerText但这需要我知道节点的名称 假设这将读取wood.xml,即使有36个节点而不是7个,并且我永远不会知道节点的名称。我尝试使用outerxml/innerxml,但这给了我太多的信息 XmlDocument doc = new XmlD

我想做的是创建一个理想的嵌套列表,基本上是一个2d列表,或者一个2d数组,如果这对这个任务更好的话,它可以按照如下方式工作,而不需要显式地选择节点

我可以使用SelectNode(Woods/Wood),然后执行类似于
node[“ID”]的操作。InnerText
但这需要我知道节点的名称


假设这将读取
wood.xml
,即使有36个节点而不是7个,并且我永远不会知道节点的名称。我尝试使用
outerxml
/
innerxml
,但这给了我太多的信息

 XmlDocument doc = new XmlDocument();
        doc.Load("wood.xml");

        //Here is wood.xml
        /*<Woods><Wood><ID>1</ID><Name>Hickory</Name><Weight>3</Weight><Thickness>4</Thickness><Density>5</Density><Purity>6</Purity><Age>7</Age></Wood><Wood><ID>2</ID><Name>Soft Maple</Name><Weight>3</Weight><Thickness>4</Thickness><Density>5</Density><Purity>6</Purity><Age>7</Age></Wood><Wood><ID>3</ID><Name>Red Oak</Name><Weight>3</Weight><Thickness>4</Thickness><Density>5</Density><Purity>6</Purity><Age>7</Age></Wood></Woods>*/


        XmlNode root = doc.FirstChild;

        //Display the contents of the child nodes.
        if (root.HasChildNodes)
        {
            for (int i=0; i<root.ChildNodes.Count; i++)
            {
                Console.WriteLine(root.ChildNodes[i].InnerXml);
                Console.WriteLine();
            }

            Console.ReadKey();
        }
XmlDocument doc=新的XmlDocument();
doc.Load(“wood.xml”);
//下面是wood.xml
/*山核桃345672软枫树345673红色橡树34567*/
XmlNode root=doc.FirstChild;
//显示子节点的内容。
if(root.HasChildNodes)
{

对于(inti=0;i这就是你想要的吗

class Program
    {   
        static void Main(string[] args)
        {
          string xml = @"<Woods><Wood><ID>1</ID><Name>Hickory</Name><Weight>3</Weight><Thickness>4</Thickness><Density>5</Density><Purity>6</Purity><Age>7</Age></Wood><Wood><ID>2</ID><Name>Soft Maple</Name><Weight>3</Weight><Thickness>4</Thickness><Density>5</Density><Purity>6</Purity><Age>7</Age></Wood><Wood><ID>3</ID><Name>Red Oak</Name><Weight>3</Weight><Thickness>4</Thickness><Density>5</Density><Purity>6</Purity><Age>7</Age></Wood></Woods>";

           XDocument doc = XDocument.Parse(xml);
           //Get your wood nodes and values in a list 
           List<Tuple<string,string>> list = doc.Descendants().Select(a=> new Tuple<string,string>(a.Name.LocalName,a.Value)).ToList();

           // display the list
           list.All(a => { Console.WriteLine(string.Format("Node name {0} , Node Value {1}", a.Item1, a.Item2)); return true; });
           Console.Read();
        }
    }  
类程序
{   
静态void Main(字符串[]参数)
{
字符串xml=@“1Hickory345672Soft Maple345673RedOak34567”;
XDocument doc=XDocument.Parse(xml);
//在列表中获取木材节点和值
List List=doc.subjects().Select(a=>newtuple(a.Name.LocalName,a.Value)).ToList();
//显示列表
All(a=>{Console.WriteLine(string.Format(“节点名{0},节点值{1}”,a.Item1,a.Item2));返回true;});
Console.Read();
}
}  

这就是你想要的吗

class Program
    {   
        static void Main(string[] args)
        {
          string xml = @"<Woods><Wood><ID>1</ID><Name>Hickory</Name><Weight>3</Weight><Thickness>4</Thickness><Density>5</Density><Purity>6</Purity><Age>7</Age></Wood><Wood><ID>2</ID><Name>Soft Maple</Name><Weight>3</Weight><Thickness>4</Thickness><Density>5</Density><Purity>6</Purity><Age>7</Age></Wood><Wood><ID>3</ID><Name>Red Oak</Name><Weight>3</Weight><Thickness>4</Thickness><Density>5</Density><Purity>6</Purity><Age>7</Age></Wood></Woods>";

           XDocument doc = XDocument.Parse(xml);
           //Get your wood nodes and values in a list 
           List<Tuple<string,string>> list = doc.Descendants().Select(a=> new Tuple<string,string>(a.Name.LocalName,a.Value)).ToList();

           // display the list
           list.All(a => { Console.WriteLine(string.Format("Node name {0} , Node Value {1}", a.Item1, a.Item2)); return true; });
           Console.Read();
        }
    }  
类程序
{   
静态void Main(字符串[]参数)
{
字符串xml=@“1Hickory345672Soft Maple345673RedOak34567”;
XDocument doc=XDocument.Parse(xml);
//在列表中获取木材节点和值
List List=doc.subjects().Select(a=>newtuple(a.Name.LocalName,a.Value)).ToList();
//显示列表
All(a=>{Console.WriteLine(string.Format(“节点名{0},节点值{1}”,a.Item1,a.Item2));返回true;});
Console.Read();
}
}  

您可以使用
xmlDocument.SelectNodes(“//child::node()”)
您可以使用
xmlDocument.SelectNodes(“//child::node()”)
“我永远不会知道节点的名称。”然后请给出一个您希望如何检索数据的示例。这就是我不知道如何做的。如果我知道节点的名称,我可以使用SelectSingleNode(“ID”).InnerText。我试图做到的是能够在不知道节点名称的情况下读取XML文件。@Henk about duplicates从未真正考虑过这一点。我之所以尝试这样做,是因为我正在处理的项目有10个XML文件,每个文件都具有相同的基本结构,但不足以让人感到有趣操作来处理所有事情。当试图处理xml文件中的微小更改时,会出现问题,需要编辑或添加数百行代码。因此,如果我有办法将整个内容加载到某种数组中,这会更容易。但现在我不确定具体如何进行。微小的更改是添加一个新的w节点。“我永远不会知道节点的名称。”然后请给出一个示例,说明您希望如何检索数据。这就是我不知道如何做的。如果我知道节点的名称,我可以使用SelectSingleNode(“ID”).InnerText。我试图做到的是能够在不知道节点名称的情况下读取XML文件。@Henk about duplicates从未真正考虑过这一点。我之所以尝试这样做,是因为我正在处理的项目有10个XML文件,每个文件都具有相同的基本结构,但不足以让人感到有趣操作来处理所有事情。当试图处理xml文件中的微小更改时,会出现问题,需要编辑或添加数百行代码。因此,如果我有办法将整个内容加载到某种数组中,这会更容易。但现在我不确定具体如何进行。微小的更改是添加一个新的w节点。这正是我想要做的。有没有不使用Linq的方法可以做到这一点?@Windex是的,可以看到“约书亚·米尔斯”的答案,但它太冗长了,所以请享受Linq;)这正是我想做的。有没有不使用Linq的方法可以做到这一点?@Windex是的,可以看到“约书亚·米尔斯”的答案,但它太冗长了,所以请享受Linq;)