2011-12-27 78 views
0

我有一个看起来像这样的一个非常基本的XML文件:价值XML根元素是完全错误的,没有找到子节点

<allData> 
    <allDataDetails> 
    <quoteid>ABC123</quoteid> 
    <customername>John Smith</customername> 
    </allDataDetails> 
    <allDataDetails> 
    <quoteid>DEF456</quoteid> 
    <customername>Jane Doe</customername> 
    </allDataDetails> 
</allData> 

我的XSD指定至少1 allDataDetails元素必须存在。文档验证正确。

虽然使用Linq查询XML时,我似乎无法识别或查询allData中的内部元素。相反,当我在调试器中查看时,Value属性是所有数据连接的。它看起来像这样:

ABC123John SmithDEF456Jane Doe 

这是我的查询代码。 myRows总是为空,因为我似乎无法得到后代:

XDocument entityXml = XDocument.Parse(myDataString); 

var myRows = from d in entityXml.Descendants("allDataDetails") 
      select new 
      { 
       quoteid = d.Element("quoteid").Value, 
       customername = d.Element("customername").Value 
      }; 

任何人都知道这里有什么可能是错的?

+0

很奇怪的是,你的XSD验证了这个 - ''标签没有正确关闭.....结束标签为'',它们与开标签不匹配..... – 2011-12-27 21:34:50

+0

但是当XML被修正了,'select new {}'中两个赋值之间缺失的逗号也是固定的 - 结果似乎是确定的。正确选择两个节点并提取正确的数据 - 到底什么是你的问题?!​​?!?!?! – 2011-12-27 21:36:24

+0

错别字由最后一个人留下来编辑我的原始条目。 – 2011-12-27 21:45:08

回答

1

我只是运行你的示例代码,并且很少修改语法错误: 并且为客户名称的值输入逗号也是错误的,请尝试我的版本,它应该工作。

string myDataString = @"<allData> 
          <allDataDetails> 
          <quoteid>ABC123</quoteid> 
          <customername>John Smith</customername> 

          </allDataDetails> 
          <allDataDetails> 
          <quoteid>DEF456</quoteid> 
          <customername>Jane Doe</customername> 

          </allDataDetails> 
         </allData>"; 
      XDocument entityXml = XDocument.Parse(myDataString); 


      var myRows = from d in entityXml.Descendants("allDataDetails") 
         select new 
         { 
          quoteid = d.Element("quoteid").Value 
          ,customername = d.Element("customername").Value 
         }; 
      foreach (var rw in myRows) 
       Console.WriteLine(rw.customername + "\t" + rw.quoteid); 
+0

我仍然有问题。在我的最后,当我在调试器中查看entityXml的属性时,他们总是错误的。我正在将文件加载到XmlDocument对象中,并将OuterXml值作为字符串传递给出现的方法。这里是我的当地人窗口的截图。 http://screencast.com/t/nbkYm6gA - 你会发现由于某些原因Root是整个字符串,并且所有的值都被连接在一起。 – 2011-12-27 21:50:31

+1

我和marc_s有完全相同的结果,并且在代码中没有问题。 Marc_S是正确的,你应该看看myRows变量。 – 2011-12-27 22:09:27

+0

'd.Element(“customername”)。Value'后面有一个逗号。 – 2011-12-28 15:40:35

2

我有你在你的当地人窗口中的错误变量寻找的印象 - 你看整个的XDocument,这是.Value物业确实会像所有节点的连接字符串值.....

但你真的应该看看MyRows变量 - 如果你真的执行您发布的代码,你应该看到:

enter image description herefull picture here

Isnt'你在找什么/期待?