Не удается заставить XPathSelectElements работать с XElement - PullRequest
3 голосов
/ 23 августа 2011

Я создаю дерево XML в памяти, используя XElement. Вот образец моего 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>

Я создаю xml, соединяя вместе XElements. Например,

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

Затем я бы хотел запросить XElement через XPath. Например,

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

1 Ответ

0 голосов
/ 22 мая 2012

Используйте XmlNodeList:

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

Это то, что я делаю, и это прекрасно работает.

...