簡體   English   中英

在VB.NET中將字符串轉換為XML節點

[英]Converting string to XML node in VB.NET

我在這樣的數據庫列中有一個XML字符串

<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>

但我需要對此字符串執行XML操作,例如選擇其名稱,屬性值,內部文本等。如何從此字符串中實現此操作

編輯

我分享了我試過的代碼片段,但沒有用

        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)

但這根本不符合我的意願

有許多方法可以在.NET中解析XML,例如使用其中一個序列化類或XmlReader類,但最常用的兩個選項是使用XElementXmlDocument解析它。 例如:

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

要么:

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

根據您更新的問題,您遇到的麻煩就是您沒有正確指定命名空間。 如果使用XElement ,它會更寬容(即松散),但是當您使用XPath選擇XmlDocument節點時,您需要指定每個命名空間,即使它是文檔頂級元素的默認命名空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM