简体   繁体   English

在VB.NET中将字符串转换为XML节点

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

I've an XML string in database column like this 我在这样的数据库列中有一个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>

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 但我需要对此字符串执行XML操作,例如选择其名称,属性值,内部文本等。如何从此字符串中实现此操作

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 . 有许多方法可以在.NET中解析XML,例如使用其中一个序列化类或XmlReader类,但最常用的两个选项是使用XElementXmlDocument解析它。 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. 如果使用XElement ,它会更宽容(即松散),但是当您使用XPath选择XmlDocument节点时,您需要指定每个命名空间,即使它是文档顶级元素的默认命名空间。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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