在.NET 2.0中将String读取为XML

时间:2011-03-04 17:17:29

标签: xml vb.net .net-2.0

我有来自DB的string。我想将其视为XML。字符串如下所示

<settings>
  <setting name="OfferIDs" value="47,48,49,50,51,52,53,76,77,78,79" />
  <setting name="someothersetting" value="" />
  <setting name="anothersetting" value="" />
</settings>

我希望使用VB.NET将OfferIDs的值作为字符串。非常感谢提前。

3 个答案:

答案 0 :(得分:5)

编辑:要使用.NET 2,我可能会使用XmlDocument

Dim document = new XmlDocument()
document.LoadXml(xml)

然后,您需要浏览文档,通过其name属性查找相应的元素,然后获取该元素的value属性。这些天我在XmlDocument生锈了,但希望这足以让你开始......


最简单的方法可能是使用LINQ to XML加载它:

Dim settings = XElement.Parse(xml)

...然后查询它。在C#中很容易,但我的VB-fu让我失败了LINQ查询部分。

C#会是这样的:

XElement settings = XElement.Parse(xml);
string offerIds = settings.Elements("setting")
                          .Where(x => (string) x.Attribute("name") == "OfferIDS")
                          .Select(x => (string) x.Attribute("value"))
                          .Single();

答案 1 :(得分:2)

无法访问LINQ,您的代码将如下所示......

Dim xmlDoc As New System.Xml.XmlDocument
xmlDoc.Load("YourXmlFile.xml")
Dim OfferIDs As String = xmlDoc.SelectSingleNode("//settings/setting[@name='OfferIDs']").Attributes("value").Value

这应该可以为您提供所需的信息。

答案 2 :(得分:0)

您可以使用StringReader结合XmlReader(快速,非缓存,仅向前访问XML数据)从字符串中读取xml。 在C#中:

string source = GetXmlAsString ();
using (StringReader xml = new StringReader (source)) {
    using (XmlReader reader = XmlReader.Create (xml)) {
        while (reader.Read ()) {
            if (reader.IsStartElement ("setting")) {
                string attrName = reader.GetAttribute ("name");
                if (attrName == "OfferIDs") {
                    string attrValue = reader.GetAttribute ("value");
                }
            }
        }
    }
}

在VB中:

Dim source As String = GetXmlAsString()
Using xml As New StringReader(source)
    Using reader As XmlReader = XmlReader.Create(xml)
        While reader.Read()
            If reader.IsStartElement("setting") Then
                Dim attrName As String = reader.GetAttribute("name")
                If attrName = "OfferIDs" Then
                    Dim attrValue As String = reader.GetAttribute("value")
                End If
            End If
        End While
    End Using
End Using