我已经编程编写了一个xml文档来存储一些数据,当我尝试将它加载回我在不同区域的应用程序中时,即使我已经给出了节点名称,我的所有Xmlnode都返回null它是完全相同的。这阻止我提取每个节点的innertext。
问题: 我错过了什么阻止我阅读这个xml文档
代码:
var xmlDocument = new XmlDocument();
xmlDocument.Load(@"\\mi\dfs\shared\Everyone\The Guy Technology\cavanaugh\OutageInformationDocument.xml");
XmlNode title = xmlDocument.SelectSingleNode("TitleTextvariable");
XmlNode type = xmlDocument.SelectSingleNode("TypeTextvaraible");
XmlNode information = xmlDocument.SelectSingleNode("InformationText");
XmlNode conference = xmlDocument.SelectSingleNode("ConferenceText");
XmlNode steps = xmlDocument.SelectSingleNode("StepsText");
XmlNode eta = xmlDocument.SelectSingleNode("EtaText");
XmlNode phone = xmlDocument.SelectSingleNode("PhoneMessageText");
XmlNode banner = xmlDocument.SelectSingleNode("BannerText");
XML示例:
<OutageInfo>
<OutageInformation>
<OutageInfoitems>
<TitleTextvariable>title text</TitleTextvariable>
<TypeTextvaraible>info</TypeTextvaraible>
<InformationText>this is a test of the outage information</InformationText>
<ConferenceText>information</ConferenceText>
<StepsText>resolve it in this way</StepsText>
<EtaText>30 minutes</EtaText>
<PhoneMessageText>There is currently a phone message up</PhoneMessageText>
<BannerText>There is not currently a banner posted</BannerText>
</OutageInfoitems>
</OutageInformation>
</OutageInfo>
答案 0 :(得分:0)
您可以使用XElement:
var xml = XElement.Load(pathToFile);
var infoItem = xml.Descendants("OutageInfoitems").First();
var title = (string)infoItem.Element("TitleTextvariable");
将元素转换为字符串(在最后一行)是首选方式,因为如果没有这样的元素,那么title
将null
而不是抛出异常。< / p>
答案 1 :(得分:0)
您正在使用的方法XmlNode.SelectSingleNode(string xpath)
,选择与传入的 XPath 表达式匹配的第一个XmlNode作为参数值。
因此,您需要使用XPath递归下降运算符//
来下降XML节点层次结构以选择深层嵌套节点:
XmlNode title = xmlDocument.SelectSingleNode("//TitleTextvariable");
XmlNode type = xmlDocument.SelectSingleNode("//TypeTextvaraible");
XmlNode information = xmlDocument.SelectSingleNode("//InformationText");
XmlNode conference = xmlDocument.SelectSingleNode("//ConferenceText");
XmlNode steps = xmlDocument.SelectSingleNode("//StepsText");
XmlNode eta = xmlDocument.SelectSingleNode("//EtaText");
XmlNode phone = xmlDocument.SelectSingleNode("//PhoneMessageText");
XmlNode banner = xmlDocument.SelectSingleNode("//BannerText");
有关详情,请参阅Context for XPath Expressions:
XPath表达式的评估取决于表达式所依赖的上下文。上下文由计算表达式的节点及其关联环境组成,其中包括以下内容......
递归下降
使用双正斜杠(//)的表达式表示可包含零级或多级层次结构的搜索。当此运算符出现在模式的开头时,上下文相对于文档的根目录。
工作.Net fiddle。