[英]how can i insert a complete node to an xml in vb.net?
我有以下 function 它帶來了一個節點列表,我需要將它添加到以下 xml
Public Function Salida(ByVal est As String, ByVal err As String, Optional node As Object = Nothing) As String
Dim m_xmld = New XmlDocument
Try
m_xmld.LoadXml("<tx><estado></estado><info></info></tx>")
m_xmld.SelectSingleNode("tx/estado").InnerText = est
m_xmld.SelectSingleNode("tx/info").InnerText = err
If Not node Is Nothing Then
m_xmld.AppendChild(node)
End If
Catch ex As Exception
m_xmld.InnerText = "Error"
End Try
Return m_xmld.InnerXml
End Function
但是當我嘗試添加它時,出現以下錯誤“{“無法將類型為“System.Xml.XmlElementList”的 object 轉換為類型“System.Xml.XmlNode”。}”
如何命名function並獲取節點:
mvarXmlSalida = Util.Salida("0", "", xmldoc.GetElementsByTagName("file"))
<Transport>
<file>
<name>test.txt</name>
<size>1,52 Kb</size>
<type>.txt</type>
<data>test data</data>
<option>ExactName</option>
</file>
<Transport>
目前還不太清楚您要 append 做什么,但以下內容應該會有所幫助:
添加以下導入
Imports System.IO
Imports System.Xml.Linq
Public Function Salida(est As String, err As String, Optional node As XElement = Nothing) As String
Dim xmlStr As String = "<tx><estado></estado><info></info></tx>"
'parse XML
Dim root As XElement = XElement.Parse(xmlStr)
If node IsNot Nothing Then
root.Elements("estado").FirstOrDefault().AddAfterSelf(node) 'option 1
'root.Elements("info").FirstOrDefault().AddAfterSelf(node) 'option 2
'root.Elements("estado").FirstOrDefault().AddFirst(node) 'option 3
'root.Elements("info").FirstOrDefault().AddFirst(node) 'option 4
End If
'save XML to string
Using tr As StringWriter = New StringWriter
root.Save(tr)
Return tr.ToString
End Using
End Function
用法 1 :
Dim xmlInput As String = "
<Transport>
<file>
<name>test.txt</name>
<size>1,52 Kb</size>
<type>.txt</type>
<data>test data</data>
<option>ExactName</option>
</file>
</Transport>"
Dim nodeTransport As XElement = XElement.Parse(xmlInput)
'node: Transport
Dim result As String = Salida("0", "", nodeTransport)
Debug.WriteLine(result)
用法 2 :
Dim xmlInput As String = "
<Transport>
<file>
<name>test.txt</name>
<size>1,52 Kb</size>
<type>.txt</type>
<data>test data</data>
<option>ExactName</option>
</file>
</Transport>"
Dim nodeTransport As XElement = XElement.Parse(xmlInput)
Dim nodeFile As XElement = nodeTransport.Elements("file").FirstOrDefault()
'node: file
Dim result As String = Salida("0", "", nodeFile)
Debug.WriteLine(result)
結果(用法 2) :
<?xml version="1.0" encoding="utf-16"?>
<tx>
<estado></estado>
<file>
<name>test.txt</name>
<size>1,52 Kb</size>
<type>.txt</type>
<data>test data</data>
<option>ExactName</option>
</file>
<info></info>
</tx>
資源:
一個猜想,
首先將你的 function 重寫。
Public Function Salida(ByVal est As String,
ByVal err As String,
Optional node As XElement = Nothing) As XElement
Dim m_xmld As XElement
m_xmld = <tx><estado><%= est %></estado><info><%= err %></info></tx>
If Not node Is Nothing Then
m_xmld.Add(node)
End If
Return m_xmld
End Function
第二,展示它的使用。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim xe As XElement
xe = <Transport>
<file>
<name>test.txt</name>
<size>1,52 Kb</size>
<type>.txt</type>
<data>test data</data>
<option>ExactName</option>
</file>
</Transport>
Dim result As XElement
result = Salida("EST", "ERR", xe.<file>.FirstOrDefault)
'result
'<tx>
' <estado>EST</estado>
' <info>ERR</info>
' <file>
' <name>test.txt</name>
' <size>1,52 Kb</size>
' <type>.txt</type>
' <data>test data</data>
' <option>ExactName</option>
' </file>
'</tx>
End Sub
正如我在評論中提到的,您正在嘗試做的事情並不清楚!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.