用C语言读取复杂xml#

用C语言读取复杂xml#,xml,windows-phone-7,linq-to-xml,Xml,Windows Phone 7,Linq To Xml,我正在尝试读取一个xml文件,该文件的格式如下: <rootnode> <a>first<b>1st</b></a> <a>second<b>2nd</b></a> </rootnode> 但它不起作用,因为(string)query.Value将为我带来整行内容;“第一” 有没有办法获取文本而不是整个元素?您需要将子元素更改为“rootnode”而不是“a”。试试这个: X

我正在尝试读取一个xml文件,该文件的格式如下:

<rootnode>
<a>first<b>1st</b></a>
<a>second<b>2nd</b></a>
</rootnode>
但它不起作用,因为(string)query.Value将为我带来整行内容;“第一”


有没有办法获取文本而不是整个元素?

您需要将子元素更改为“rootnode”而不是“a”。试试这个:

XDocument loadedData = XDocument.Load("file.xml");
var data = (from query in loadedData.Descendants("rootnode")
    select new myClass
    {
        Word  = (string)query.Element("a"),
        secondWord  = ((string)query.Element("b"))
    });

您需要将子代更改为“rootnode”而不是“a”。试试这个:

XDocument loadedData = XDocument.Load("file.xml");
var data = (from query in loadedData.Descendants("rootnode")
    select new myClass
    {
        Word  = (string)query.Element("a"),
        secondWord  = ((string)query.Element("b"))
    });

我实在无法探索在XML中处理这一问题的“正确”方法,但是如果您对结果进行了一些字符串操作呢

 var data = from query in loadedData.Descendants("a")
     select new myClass
     {
         Word = (string)query.Value.Substring(0, ((string)query.Value).Length - ((string)query.Element("b").Value).Length),
         secondWord = (string)query.Element("b")
     };
很难看,但很管用。我确信有一种“更好”的方法,但正如我所说,我目前没有足够的带宽来研究它

编辑

正如我在对原始问题的评论中提到的,如果您首先能够控制XML的编写,那么最好重新格式化它——可能是这样

<rootnode>
  <item><a>first</a><b>1st</b></item>
  <item><a>second</a><b>2nd</b></item>
</rootnode>

第一
第二
这不仅使您能够整理代码以获得干净的值,还允许灵活地在每个元素中添加更多数据项(如果需要)。e、 g

<rootnode>
  <item><a>first</a><b>1st</b><c>primary</c></item>
  <item><a>second</a><b>2nd</b><c>secondary</c></item>
</rootnode>

第一季度
第二次

我真的无法在XML中对处理这一问题的“正确”方法做太多探索,但是如果您对结果进行了一些字符串操作呢

 var data = from query in loadedData.Descendants("a")
     select new myClass
     {
         Word = (string)query.Value.Substring(0, ((string)query.Value).Length - ((string)query.Element("b").Value).Length),
         secondWord = (string)query.Element("b")
     };
很难看,但很管用。我确信有一种“更好”的方法,但正如我所说,我目前没有足够的带宽来研究它

编辑

正如我在对原始问题的评论中提到的,如果您首先能够控制XML的编写,那么最好重新格式化它——可能是这样

<rootnode>
  <item><a>first</a><b>1st</b></item>
  <item><a>second</a><b>2nd</b></item>
</rootnode>

第一
第二
这不仅使您能够整理代码以获得干净的值,还允许灵活地在每个元素中添加更多数据项(如果需要)。e、 g

<rootnode>
  <item><a>first</a><b>1st</b><c>primary</c></item>
  <item><a>second</a><b>2nd</b><c>secondary</c></item>
</rootnode>

第一季度
第二次

如果您对xml有任何控制权,我会认真建议您将其重构为更易于维护的内容,例如
first1st
。如果你能做到这一点,你的代码会变得更干净,并且在以后需要添加
元素时不太可能中断。如果你对xml有任何控制,我会认真建议你将它重构为更易于维护的东西,例如
first1st
。如果您能够做到这一点,您的代码将变得更干净,并且在以后需要添加
元素时,代码不太可能中断。