0
linqでxpathを使用する必要があるため、私はWindow Phoneアプリケーションで作業しています。残念ながら、xpathは現在サポートされていません。私は、ユーザーがノードを選択するときに再帰的にドリルダウンするxmlファイルを持っています。 node()/ @ titleはリストボックスにロードされます。ユーザが選択し、そのようにする。私は通常、xpath述部を動的に構築します。例えばWindows上でlinq-to-xmlを使用して動的に述語を構築する電話
:私が使用したXPathで
<cfr>
<chapter title="CHAPTER VI" volume="6">
<subchapter title="SUBCHAPTER A" volume="6">
<part number="600" title="PART 600">
<subpart number="Subpart A" part="PART 600" title="Subpart A Farm Credit Administration">
<section number="600.1" title="The Farm Credit Act." part="PART 600" link="12CFR600.1" type="cfr"/>
<section number="600.2" title="Farm Credit Administration." part="PART 600" link="12CFR600.2" type="cfr"/>
</subpart>
</part>
<part number="601" title="PART 601">
<section number="601.1" title="The Credit Act." part="PART 601" link="12CFR6001.1" type="cfr"/>
</part>
</subchapter>
<part>......</part>
</chapter>
</cfr>
:
/node()/node()/node()/node()[@title='PART 601']/node()[@title='The Music Act.']/@title
私は、ユーザーがクリックし、どのインデックスしているか、深いを追跡します。私はC#でそのようなXPathの述語を構築します:
private String XpathBuilder(bool isParentNode)
{
int nCount = AcmSinglton.NodeCount;
StringBuilder nodeStr = new StringBuilder();
nodeStr.Append("/node()/node()");
for (int i = 0; i < nCount; i++)
{
if (i != 0)
{
nodeStr.Append("[@title = '" + AcmSinglton.TitlePredicatesArrayList.get(i - 1).toString() + "']/node()");
}
else
{
nodeStr.Append("/node()");
}
}
return nodeStr.ToString();
}
だから私は動的LINQからXMLを使用して述語を構築するためのアイデアを探しています。ここで
私がこれまで持っているものである。このような
XDocument xml = XDocument.Load(String.Format("Resourses/c{0}x{1}.xml", this.CFRTitle, this.Volume));
var nodes = from x in xml.Elements().ElementAt(nodeDepth).Elements()
select new Menus.Chapter
{
Title = x.Attribute("title").Value
};
this.MainListBox.ItemsSource = nodes.ToList();