2014-04-01 55 views
0

XML我有下面的xml:为xml直访问属性值里面

<Team> 
<Member Name="Alex" Info="&lt;Details Weight=&quot;80&quot; Category=&quot;Fighter&quot; LastFight=&quot;2014-03-01&quot; /&gt;"/> 
</Team> 

我想找到一种方式来加载属性LastFight直而不产生大量xmldocuments的。这里是我的代码使用方法:

价值 Info
Dim storagexml As New XmlDocument 
storagexml.LoadXml(<Team><Member Name="Alex" Info="&lt;Details Weight=&quot;80&quot; Category=&quot;Fighter&quot; LastFight=&quot;2014-03-01&quot; /&gt;"/></Team>) 
Dim tempnodelist As XmlNodeList = storagexml.SelectNodes("Team/Member") 
For Each tempnode As XmlNode In tempnodelist 
If tempnode.Attributes("Name") IsNot Nothing Then 
Dim tempdoc As New XmlDocument 
tempdoc.LoadXml(tempnode.Attributes("Info").Value) 
Dim tempsel As XmlNode = tempdoc.SelectSingleNode("Info") 
If Not tempsel.Attributes("LastFight").Value.Trim() = "" Then 
RichTextBox1.AppendText(tempnode.Attributes("Name").Value & " " & tempsel.Attributes("LastFight").Value & vbCrLf) 
End If 
+0

上升到顶部在我头上的那一刻最大的问题是:为什么你有HTML编码XML包含的属性中的XML文件?这是可能的事情,你可以改变,而不是试图拿起属性作为一个字符串,解码HTML编码的字符,并将其加载到XML文档? – Adrian

+0

因为会有一些文字里面包含&符。为了防止任何错误决定放在这里。 – Chelovek

+0

所以你编码可能含有&符号的文本,并没有什么比你更需要。编码整个XML文档并且将其放置在另一个XML文档的文本属性是类似于用大锤杀死的蚂蚁。 – Adrian

回答

0

属性是另一个XML字符串,所以据我所看到的,你不能避免其加载到另一XML对象的抽象(f.e XmlDocument)。

无论如何,你可以使用LINQ到XML简化代码。例如使用XElement和VB.NET具体功能来访问XML内嵌的一部分:

Dim xml = <Team> 
       <Member Name="Alex" Info="&lt;Details Weight=&quot;80&quot; Category=&quot;Fighter&quot; LastFight=&quot;2014-03-01&quot; /&gt;"/> 
      </Team> 

'notice how to access child element and attribute inline : 
' 
Dim info = XElement.Parse(xml.<Member>[email protected]) 
Dim lastFight As String = [email protected] 
Console.WriteLine(lastFight)