2011-09-30 72 views
1

我遇到了一个XML值的问题,它在我调试时将它加载到XML文档中,但没有找到值或要访问的节点。这里是xml。我想得到的价值是“活跃”。现在这个XML不是一个文件或任何东西,是作为一个字符串传递的......(不能修改这个部分)只能访问我可以创建函数来访问它的类,但不能修改实际获取值的代码并且把它当作一个 “XML字符串” 这里只阅读XML节点

<Clients> 
    <BillingCycle>30</BillingCycle> 
    <Category>1</Category> 
    <Type>Admin</Type> 
    <AddressCat>3</AddressCat> 
    <ZipCodeCat>5</ZipCodeCat> 
    <ClientManager> 
    <UserID>5</UserID> 
    <ZPVal>1</ZPVal> 
    <DRY1>Test</DRY1> 
    <Active>1</Active> 
    </ClientManager> 
</Clients> 

C#代码

public bool IsActive(int ClientID, int VassID) 
     { 
      bool isActive = false; 
      HelperClass helper = new HelperClass(); 
      XmlDocument xml = new XmlDocument(); 

      //at this point i can see the data was stored in the xml when debugging 
      xml.LoadXml(helper.GetClientXML(ClientID, VassID)); 

      //have tried the following do not woerk 
     // XmlNode node = xml.SelectSingleNode ("/Clients/ClientManager/Active/text()"); 

      XmlNode node = xml.SelectSingleNode("Clients/ClientManager/Active"); 

      int isActiveVal = Convert.ToInt32(node.Value); 

      if (isActiveVal == 1) 
      { 
       isActive = true; 
      } 

      return isActive; 
     } 

回答

1

这条线可以工作:

//XmlNode node = xml.SelectSingleNode ("/Clients/ClientManager/Active/text()"); 
var activeTextNodes = xml.SelectNodes("/Clients/ClientManager/Active/text()"); 

...但它会选择一组活动文本()值,您可能不想要。

您可以访问节点的InnerText值你发现:

XmlNode node = xml.SelectSingleNode("Clients/ClientManager/Active"); 
int isActiveVal = Convert.ToInt32(node.InnerText); 

或者你也可以访问第一个孩子的价值:

XmlNode node = xml.SelectSingleNode("Clients/ClientManager/Active"); 
int isActiveVal = Convert.ToInt32(node.FirstChild.Value); 

这一切都这样说,你应该使用int.TryParse而不是Convert.ToInt32,因为它不会在非整数数据上抛出异常。

1

使用的innerText,而不是价值