none
LINQ TO XML查询数据的奇怪问题???!!! RRS feed

  • 问题

  • XML源文件格式如下:
    <?xml version="1.0" encoding="utf-8"?>
    <WebTest Name="Verify TOU" Id="19b9d5ec-b333-49e1-b29e-89f89fb0ec95" Owner="" Priority="0" Enabled="True" CssProjectStructure="" CssIteration="" Timeout="0" WorkItemIds="" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2006" Description="" CredentialUserName="" CredentialPassword="" PreAuthenticate="True" Proxy="" StopOnError="False" Test="abcdefg">
      <Items>
        <Request Method="GET" Version="1.1" Url="{{WebServer1}}/" ThinkTime="3" Timeout="300" ParseDependentRequests="True" FollowRedirects="True" RecordResult="True" Cache="False" ResponseTimeGoal="0" Encoding="utf-8" ExpectedHttpStatusCode="0" ExpectedResponseUrl="" RequestID="1" PageName="No Name" IsTakeScreenShot="False">
          <CorrelationExtractionRules>
            <ExtractionRule Classname="Microsoft.VisualStudio.TestTools.WebTesting.Rules.ExtractText, Microsoft.VisualStudio.QualityTools.WebTestFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" VariableName="QueryStringParam1.wreply" DisplayName="" Description="">
              <RuleParameters>
                <RuleParameter Name="StartsWith" Value="?wreply=" />
                <RuleParameter Name="EndsWith" Value="&quot;" />
                <RuleParameter Name="Index" Value="0" />
                <RuleParameter Name="IgnoreCase" Value="False" />
                <RuleParameter Name="UseRegularExpression" Value="False" />
                <RuleParameter Name="HtmlDecode" Value="True" />
                <RuleParameter Name="Required" Value="False" />
              </RuleParameters>
            </ExtractionRule>
          </CorrelationExtractionRules>
          <QueryStringParameters>
            <QueryStringParameter Name="mkt" Value="en-US" RecordedValue="en-US" CorrelationBinding="" UrlEncode="False" UseToGroupResults="False" />
          </QueryStringParameters>
        </Request>
        <Request Method="GET" Version="1.1" Url="{{WebServer1}}/terms.aspx" ThinkTime="0" Timeout="300" ParseDependentRequests="True" FollowRedirects="True" RecordResult="True" Cache="False" ResponseTimeGoal="0" Encoding="utf-8" ExpectedHttpStatusCode="0" ExpectedResponseUrl="" RequestID="2" PageName="Legal Page" IsTakeScreenShot="True">
          <QueryStringParameters>
            <QueryStringParameter Name="wreply" Value="http%3a%2f%2ffuwamid.live-int.com%2fDefault.aspx%3fmkt%3den-US" RecordedValue="http%3a%2f%2ffuwamid.live-int.com%2fDefault.aspx%3fmkt%3den-US" CorrelationBinding="{{QueryStringParam1.wreply}}" UrlEncode="False" UseToGroupResults="False" />
          </QueryStringParameters>
          <Validation Name="ManualVerify" xmlns="">
            <Case ID="1005" Description="Verify all string of Privacy page are localized." />
          </Validation>
        </Request>
      </Items>
      <ContextParameters>
        <ContextParameter Name="WebServer1" Value="http://fuwamid.live-int.com" />
      </ContextParameters>
      <ValidationRules>
        <ValidationRule Classname="Microsoft.VisualStudio.TestTools.WebTesting.Rules.ValidateResponseUrl, Microsoft.VisualStudio.QualityTools.WebTestFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" DisplayName="Response URL" Description="Validates that the response URL after redirects are followed is the same as the recorded response URL.  QueryString parameters are ignored." Level="Low" />
      </ValidationRules>
    </WebTest>




    问题是,我现在需要利用LINQ技术来获得Items节点,理论上来说如下代码就能达到要求

    XDocument doc=XDocument.Load("aaa.xml");

    XElement itemsElement=doc.Root.Element("Items");

    以下方法全部试了个遍,返回都是空的:

    (1)
    IEmurable<XElement> items=doc.Root.Elements("Items");

    foreach(brabarbar)
    {
        //无效
    }


    (2)
    IEmurable<XElement> items=doc.Root.Descsends("Items");

    foreach(brabarbar)
    {
        //还是无效
    }


    • 已移动 邹俊才Moderator 2011年3月4日 15:47 (发件人:2011微软MSDN论坛线下活动互动讨论区(挨踢人士甘苦讨论区))
    2009年3月13日 7:12

答案

  • 你好,用下面的语句可以直接获得你想要的节点,括号里面是正则表达式:

     XmlNode xmlNode = doc.SelectSingleNode("//*[@Title='" + currentTitle + "']");





    我们要把爱心传递给更多需要帮助的人。
    博客:http://terryfeng.cnblogs.com
    微博:http://t.sina.com.cn/terryfeng
    个人:http://www.terryfeng.com

    2012年4月30日 6:38
    版主

全部回复

  •  取XML数据有很多种方法,你换一种试一下

    My blog: http://blog.csdn.net/dotfun http://dotfun.cnblogs.com

    My contact: QQ:372900288 E-mail:372900288@qq.com msn:sellnet007@hotmail.com

    2009年3月17日 9:30
  • 你好,用下面的语句可以直接获得你想要的节点,括号里面是正则表达式:

     XmlNode xmlNode = doc.SelectSingleNode("//*[@Title='" + currentTitle + "']");





    我们要把爱心传递给更多需要帮助的人。
    博客:http://terryfeng.cnblogs.com
    微博:http://t.sina.com.cn/terryfeng
    个人:http://www.terryfeng.com

    2012年4月30日 6:38
    版主