我有一个像下面这样的xml文档:
<menuitem navigateurl="/PressCentre/" text="прес център">
<menuitem navigateurl="/PressCentre/RegisterForPressAlerts/" text="регистър за прес съобщения" />
<menuitem navigateurl="/PressCentre/PressReleases/" text="прес съобщения">
<menuitem navigateurl="/PressCentre/PressReleases/PressReleasesArchive/" text="архив прес съобщения" />
</menuitem>
<menuitem navigateurl="/PressCentre/PressKit/" text="прес комплект">
<menuitem navigateurl="/PressCentre/PressKit/FactSheets/" text="списък факти" />
<menuitem navigateurl="/PressCentre/PressKit/ExpertComments/" text="коментари на експерти" />
<menuitem navigateurl="/PressCentre/PressKit/Testimonials/" text="препоръки" />
<menuitem navigateurl="/PressCentre/PressKit/MediaFiles/" text="медия файлове" />
<menuitem navigateurl="/PressCentre/PressKit/Photography/" text="снимки" />
</menuitem>
<menuitem navigateurl="/PressCentre/PressContacts/" text="прес контакти" />
</menuitem>
Run Code Online (Sandbox Code Playgroud)
我需要在navigateurl之间获得值(例如"/ PressCentre").是否有一个众所周知的正则表达式脚本来执行此操作?
谢谢
一个基本的递归(没有测试,但我认为没关系):
private void Caller(String filepath)
{
XPathDocument oDoc = new XPathDocument(filepath);
Readnodes( oDoc.CreateNavigator() );
}
private void ReadNodes(XPathNavigator nav)
{
XPathNodeIterator nodes = nav.Select("menuitem");
while (nodes.MoveNext())
{
//A - read the attribute
string url = nodes.Current.GetAttribute("navigateurl", string.Empty);
//B - do something with the data
//C - recurse
ReadNodes(nodes.Current);
}
}
Run Code Online (Sandbox Code Playgroud)
...因为XPathNodeIterator的Current属性也是XPathNavigator而起作用.显然,您需要扩展此功能以将数据推送到字典或跟踪深度或其他任何内容.
| 归档时间: |
|
| 查看次数: |
14500 次 |
| 最近记录: |