无法使XPathSelectElements与XElement一起使用

时间:2011-08-22 21:04:38

标签: xpath xelement

我正在使用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>

我通过将XElements链接在一起来创建xml。例如,

var root = new XElement("Curve", 
    new XElement("Function", "createCurve"), 
    new XElement("Parameters"), etc);

然后我想通过XPath查询XElement。例如,

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树中查询多个元素?

谢谢!

德鲁

1 个答案:

答案 0 :(得分:-3)

使用XmlNodeList:

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

我所做的就是完美的。