2012-12-13 66 views
1

下面是我的XML文件和函數,使用一個值來獲取父節點。但我很驚訝得到父節點。如何使用vb.net獲取xml文件中某個值的父節點?

當值133傳遞給函數它應該返回「firstnode」 當124傳遞給函數它應該返回「secondnode」

我怎樣才能做到這一點?

在c#中的任何幫助也將有所幫助。由於

我的XML文件:

<sample> 
    <firstnode> 
     <id>133</id> 
    </firstnode> 
    <secondnode> 
     <id>124</id> 
    </secondnode> 
</sample> 

我在vb.net功能:

Public Shared Function Get_NodeName_by_ID(ByVal ID As String) As String 
    Dim value As String = "" 
    Dim strPath = HttpContext.Current.Server.MapPath("~/" + ConfigurationManager.AppSettings("app_settings").ToString()) 
    Dim doc As New XmlDocument() 
    doc.Load(strPath) 

    Return value 
End Function 

回答

3

XPath提供您的設施來操作XML文檔按您的要求。 使用下面的XPath表達式來做到這一點,並抱歉我的代碼是在C#所以,你需要在VB中轉換它。

XPath表達式:樣品/ * [ID = 133]

C#代碼:

//Load FileXML 
XmlDocument objFileXML = new XmlDocument(); 

objFileXML .Load(sFilePath); 

//For selecting nodes having given value 
XmlNodeList lstNodes = objFileXML .SelectNodes("sample/*[id=133]"); 

注意:你可以把任何變量,如果要動態把值。它只會在你的VB代碼中。 我希望這對你有用。

+0

lstNodes.Count總是返回0.我已經使用了與上面相同的代碼。會有什麼問題? – Anuya

+0

請確保xml文件結構與上面提供的相同。我試過了,並且它返回1.並且調試你的項目,檢查objFileXML是否正確加載文件。如果它正確加載文件,那麼它必須找到值爲133的節點。 –

1

這個解決方案的工作者對我來說。

Dim strPath = HttpContext.Current.Server.MapPath("~/" + ConfigurationManager.AppSettings("settings").ToString()) 
      Dim doc As New XmlDocument() 
      doc.Load(strPath) 

     Dim ParentNode As XmlNodeList = doc.GetElementsByTagName("id") 
     For Each node As XmlNode In ParentNode 
      If (ID.Equals(node.ChildNodes(0).Value)) Then 
       value = node.ParentNode.Name.ToString() 
      End If 
     Next 
相關問題