简体   繁体   中英

Converting string to XML node in VB.NET

I've an XML string in database column like this

<trueFalseQuestion id="585" status="correct" maxPoints="10" 
                   maxAttempts="1" 
                   awardedPoints="10" 
                   usedAttempts="1" 
                   xmlns="http://www.ispringsolutions.com/ispring/quizbuilder/quizresults">
    <direction>You have NO control over how you treat customers.</direction>
    <answers correctAnswerIndex="1" userAnswerIndex="1">
        <answer>True</answer>
        <answer>False</answer>
    </answers>
</trueFalseQuestion>

But I need to do XML operations on this string like select its name, attributes values,inner text etc. How can I make this possible from this string

EDIT

Im sharing the code snippet I tried, but not working

        Dim myXML As String
        Dim gDt As New DataTable
        gDt.Columns.Add("id")
        gDt.Columns.Add("questionid")
        gDt.Columns.Add("serial")
        gDt.Columns.Add("direction")
        Dim dr As DataRow


            myXML ='<my above shared XML>'
            Dim xmlDoc As New XmlDocument
            xmlDoc.LoadXml(myXML)
            dr = gDt.NewRow
            dr("serial") = 1
            dr("id") = xmlDoc.Attributes("id").Value
            dr("direction") = xmlDoc("direction").InnerText
             gDt.Rows.Add(dr)

But thats not working at all as I wish

There are many ways to parse XML in .NET, such as using one of the serialization classes or the XmlReader class, but the two most popular options would be to parse it with either XElement or XmlDocument . For instance:

Dim input As String = "<trueFalseQuestion id=""585"" status=""correct"" maxPoints=""10"" maxAttempts=""1"" awardedPoints=""10"" usedAttempts=""1"" xmlns=""http://www.ispringsolutions.com/ispring/quizbuilder/quizresults""><direction>You have NO control over how you treat customers.</direction><answers correctAnswerIndex=""1"" userAnswerIndex=""1""><answer>True</answer><answer>False</answer></answers></trueFalseQuestion>"
Dim element As XElement = XElement.Parse(input)
Dim id As String = element.@id

Or:

Dim input As String = "<trueFalseQuestion id=""585"" status=""correct"" maxPoints=""10"" maxAttempts=""1"" awardedPoints=""10"" usedAttempts=""1"" xmlns=""http://www.ispringsolutions.com/ispring/quizbuilder/quizresults""><direction>You have NO control over how you treat customers.</direction><answers correctAnswerIndex=""1"" userAnswerIndex=""1""><answer>True</answer><answer>False</answer></answers></trueFalseQuestion>"
Dim doc As New XmlDocument()
doc.LoadXml(input)
Dim nsmgr As New XmlNamespaceManager(doc.NameTable)
nsmgr.AddNamespace("q", "http://www.ispringsolutions.com/ispring/quizbuilder/quizresults")
Dim id As String = doc.SelectSingleNode("/q:trueFalseQuestion/@id", nsmgr).InnerText

Based on your updated question, it looks like the trouble you were having is that you weren't properly specifying the namespace. If you use XElement , it's much more forgiving (ie loose), but when you use XPath to select nodes in an XmlDocument , you need to specify every namespace, even when it's the default namespace on the top-level element of the document.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM