尝试读取XML文档

时间:2017-12-22 18:32:18

标签: c# xml xpath

我已经编程编写了一个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>

2 个答案:

答案 0 :(得分:0)

您可以使用XElement

var xml = XElement.Load(pathToFile);
var infoItem = xml.Descendants("OutageInfoitems").First();
var title = (string)infoItem.Element("TitleTextvariable");

将元素转换为字符串(在最后一行)是首选方式,因为如果没有这样的元素,那么titlenull 而不是抛出异常。< / 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