无法让XPathSelectElements使用XElement

无法让XPathSelectElements使用XElement,xpath,xelement,Xpath,Xelement,我正在使用XElement创建内存中的Xml树。以下是我的xml示例: <Curve> <Function>createCurve</Function> <Parameters> <Input> <BaseCurve> <CurveType Type="String">16fSmoothCurve</CurveType&

我正在使用XElement创建内存中的Xml树。以下是我的xml示例:

<Curve>
    <Function>createCurve</Function>
    <Parameters>
        <Input>
            <BaseCurve>
                <CurveType Type="String">16fSmoothCurve</CurveType>
                <Ccy Type="String">USD</Ccy>
                <Tenors>
                     <Item Type="String">1M</Item>
                     <Item Type="String">3M</Item>
                     <Item Type="String">1U</Item>
                     <Item Type="String">Z1</Item>
                 </Tenors>
                <Rates>
                    <Item Type="String">.02123</Item>
                    <Item Type="String">.02214</Item>
                    <Item Type="String">.021234</Item>
                    <Item Type="String">.02674</Item>
                </Rates>
            </BaseCurve>
        </Input>
    </Parameters>
</Curve>
然后我想通过XPath查询XElement。比如说,

var root = new XElement("Curve", 
    new XElement("Function", "createCurve"), 
    new XElement("Parameters"), etc);
var tenors = root.XPathSelectElements("//Tenors/Item");
var rates = root.XPathSelectElements("//Rates/Item");
var firstTenor = root.XPathSelectElement("//Tenors/Item");
var firstRate = root.XPathSelectElement("//Rates/Item");
我可以成功地选择单个元素,例如

var root = new XElement("Curve", 
    new XElement("Function", "createCurve"), 
    new XElement("Parameters"), etc);
var tenors = root.XPathSelectElements("//Tenors/Item");
var rates = root.XPathSelectElements("//Rates/Item");
var firstTenor = root.XPathSelectElement("//Tenors/Item");
var firstRate = root.XPathSelectElement("//Rates/Item");

但是,尝试选择多个元素会得到0个结果

我尝试创建一个XDocument并查询它,但得到了相同的结果。我还尝试在树的开头添加一个XDeclaration,但没有成功

为什么我不能从XElement树中查询多个元素

谢谢

Drew

使用XmlNodeList:

XmlNodeList nodesXml = root.SelectNodes("//Tenors/Item");
foreach (XmlNode item in nodList)
        {
            var tenors = item.InnerText;
        }

我就是这么做的,而且效果很好

但是,尝试选择多个元素会得到0个结果。-给我们看看这个代码。当我设置它时,tenors.Count返回4。因为我的项目有太多的外部依赖项,无法真正发布代码,所以我尝试创建一个示例项目来重现这个问题。我可以在我的示例项目中选择多个元素,因此我认为这可能与我如何创建我真正项目中的元素有关。我将创建的整个xml文档保存到文件中,并调用XElement.Loadc:\temp\foo.xml,它就可以工作了。如果可以的话,我会尝试复制和发布。除此之外,在创建XElement树的过程中是否有任何东西会阻止我进行这些查询?好的,问题已经解决了。令人尴尬的是,我的XPath查询没有结果的结论是基于即时窗口中的执行。在即时窗口中执行查询时,您会得到:{System.Xml.XPath.xpatheevaluator.evaluateInterator}result:null我假设没有结果,因为我看到了result:null。在构建了一个示例控制台应用程序来尝试重现这个问题之后,我无法找出我的两个代码库之间的区别。谢谢@AakashM提醒我复制,否则我仍然会头痛。请您将您最后的评论作为答案发布,然后将问题标记为已回答?XMLNodeList是System.Xml,XElement是System.Xml.Linq/Linq-to-Xml,因此即使有效,这也不是真正相关的。