首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

VB.net操作XML创建一个带前缀的节点的有关问题

2012-11-08 
VB.net操作XML创建一个带前缀的节点的问题如果使用下面的语句创建一个节点Dim newNode As XmlNode tempF

VB.net操作XML创建一个带前缀的节点的问题
如果使用下面的语句创建一个节点
  Dim newNode As XmlNode = tempFile.CreateNode(XmlNodeType.Element,"TESTPrefix:TESTNODE", Nothing)
则创建出来的节点如下:
<TESTNODE /> 没有前缀

如果使用下面的语句创建一个节点
 Dim newNode As XmlNode = tempFile.CreateNode(XmlNodeType.Element,"TESTPrefix:TESTNODE", "TESTPrefix")
则创建出来的节点如下:
<TESTPrefix:TESTNODE xmlns:TESTPrefix="TESTPrefix" />
前缀是有了 但是多出来这部分内容xmlns:TESTPrefix="TESTPrefix"且无法删掉。这部分多出来的内容并不属于Attribute

如果使用下面的语句创建一个节点
 Dim newNode As XmlNode = tempFile.CreateNode(XmlNodeType.Element,"TESTPrefix","TESTNODE", null) 或
Dim newNode As XmlNode = tempFile.CreateNode(XmlNodeType.Element,"TESTPrefix","TESTNODE", null)
则创建出来的节点如下:
<TESTNODE /> 没有前缀

如果使用下面的语句创建一个节点
Dim newNode As XmlNode = tempFile.CreateNode(XmlNodeType.Element,"TESTPrefix","TESTNODE", "TESTPrefix")

则创建出来的节点如下:
<TESTPrefix:TESTNODE xmlns:TESTPrefix="TESTPrefix" />
前缀是有了 但是多出来这部分内容xmlns:TESTPrefix="TESTPrefix"且无法删掉。这部分多出来的内容并不属于Attribute

以上方法创建出来的节点的node.name 都为:TESTPrefix:TESTNODE 但就是xml上没有前缀。


求教 如何能创建一个这样的节点
<TESTPrefix:TESTNODE />
 



[解决办法]
你使用字符串格式,保存成xml名称的文本文件吧

TESTPrefix代表名称空间,需要xmlns的
[解决办法]
俺早些时候,设计的一个子程序,你参考下,可直接调用,或你参考着改吧。

VB.NET code
  '----调用示例    '---根据属性条件删除    '   Delete_Xml_Data(Xml_FileName, "Kjx_Config//Zb_Data_Solutions//Switch", "Num", "Type", "Type", "2")   '满足属性Type="2"删除其下全部属性数据    '   Delete_Xml_Data(Xml_FileName, "Kjx_Config//Zb_Data_Solutions//Switch", "Num", "", "Type", "2")       '满足属性Type="2"删除其下Num属性数据    '   Delete_Xml_Data(Xml_FileName, "Kjx_Config//Zb_Data_Solutions//Switch", "", "Type", "Type", "2")      '满足属性Type="2"删除其下Type属性数据    '   Delete_Xml_Data(Xml_FileName, "Kjx_Config//Zb_Data_Solutions//Switch", "", "", "Type", "2")          '满足属性Type="2"删除节点数据    '---根据属性条件删除    '---强删除    '   Delete_Xml_Data(Xml_FileName, "Kjx_Config//Zb_Data_Solutions//Switch", "Num", "Type", "", "")   '删除其下全部属性数据    '   Delete_Xml_Data(Xml_FileName, "Kjx_Config//Zb_Data_Solutions//Switch", "Num", "", "", "")       '删除其下Num属性数据    '   Delete_Xml_Data(Xml_FileName, "Kjx_Config//Zb_Data_Solutions//Switch", "", "Type", "", "")      '删除其下Type属性数据    '   Delete_Xml_Data(Xml_FileName, "Kjx_Config//Zb_Data_Solutions//Switch", "", "", "", "")          '删除节点数据    '---    '   Delete_Xml_Data(Xml_FileName, "Kjx_Config//Zb_Data_Solutions", "", "", "", "")   '删除数据    '---强删除    '----调用示例    '------------    '   子程序名 : 删除 XML 文件中的指定数据    '   参数1 filename  带路径文件名    '   参数2 xml_Nodes 带路径节点名 ,"Kjx_Config//Zb_Data_Solutions//Switch"    '   参数3 xml_Attribute1 节点的第1个属性名--处理的对象,删此属性用    '   参数4 xml_Attribute2 节点的第2个属性名--处理的对象,删此属性用,参数3,4均为空时,则操作对象是删该节点    '   参数5 Search_attribute 查找的属性名--删除需要的条件,参数5为空时,则属于强删除,不检查条件选项    '   参数6 Attribute_Data   查找的属性数据内容    '------------    Sub Delete_Xml_Data(ByVal filename As String, ByVal xml_Nodes As String, ByVal xml_Attribute1 As String, _                 ByVal xml_Attribute2 As String, ByVal Search_attribute As String, ByVal Attribute_Data As String)    '后面两参数是属性条件        Try            Dim xmlDoc As New XmlDocument()            xmlDoc.Load(filename)            '  Dim xnl As XmlNodeList = xmlDoc.SelectSingleNode(xml_Nodes).ChildNodes    ---备用            Dim xnl As XmlNodeList = xmlDoc.SelectNodes(xml_Nodes)        '目标是 xml_Nodes 节点下的所有对象            '----            If Search_attribute = "" Then               '判定是否需要满足属性条件删除                If xml_Attribute1 = "" Then                    If xml_Attribute2 = "" Then                        '  遍历 xml_Nodes 所有子节点或对象‘将其下面内容删除                        For Each xn As XmlNode In xnl                            Dim xe As XmlElement = DirectCast(xn, XmlElement)                            xe.RemoveAll()                                    '将 xml_Nodes 节点内容移除,保留默认目录                        Next                    Else                        '  遍历 xml_Nodes 所有子节点或对象‘将其下面内容删除                        For Each xn As XmlNode In xnl                            Dim xe As XmlElement = DirectCast(xn, XmlElement)                            xe.RemoveAttribute(xml_Attribute2)                '只删去 xml_Attribute2 的属性及值--选择性删除                        Next                    End If                Else                    If xml_Attribute2 = "" Then                        '  遍历 xml_Nodes 所有子节点或对象‘将其下面内容删除                        For Each xn As XmlNode In xnl                            Dim xe As XmlElement = DirectCast(xn, XmlElement)                            xe.RemoveAttribute(xml_Attribute1)                '只删去 xml_Attribute1 的属性及值--选择性删除                        Next                    Else                        '  遍历 xml_Nodes 所有子节点或对象‘将其下面内容删除                        For Each xn As XmlNode In xnl                            Dim xe As XmlElement = DirectCast(xn, XmlElement)                            xe.RemoveAllAttributes()                          '将其下所有 属性移除                        Next                    End If                End If                '----            Else                If xml_Attribute1 = "" Then                    If xml_Attribute2 = "" Then                        '  遍历 xml_Nodes 所有子节点或对象‘将其下面内容删除                        For Each xn As XmlNode In xnl                            Dim xe As XmlElement = DirectCast(xn, XmlElement)                            If xe.GetAttribute(Search_attribute) = Attribute_Data Then     '根据属性条件删除                                xe.RemoveAll()                                    '将 xml_Nodes 节点内容移除,保留默认目录                            End If                        Next                    Else                        '  遍历 xml_Nodes 所有子节点或对象‘将其下面内容删除                        For Each xn As XmlNode In xnl                            Dim xe As XmlElement = DirectCast(xn, XmlElement)                            If xe.GetAttribute(Search_attribute) = Attribute_Data Then     '根据属性条件删除                                xe.RemoveAttribute(xml_Attribute2)                '只删去 xml_Attribute2 的属性及值--选择性删除                            End If                        Next                    End If                Else                    If xml_Attribute2 = "" Then                        '  遍历 xml_Nodes 所有子节点或对象‘将其下面内容删除                        For Each xn As XmlNode In xnl                            Dim xe As XmlElement = DirectCast(xn, XmlElement)                            If xe.GetAttribute(Search_attribute) = Attribute_Data Then     '根据属性条件删除                                xe.RemoveAttribute(xml_Attribute1)                '只删去 xml_Attribute1 的属性及值--选择性删除                            End If                        Next                    Else                        '  遍历 xml_Nodes 所有子节点或对象‘将其下面内容删除                        For Each xn As XmlNode In xnl                            Dim xe As XmlElement = DirectCast(xn, XmlElement)                            If xe.GetAttribute(Search_attribute) = Attribute_Data Then     '根据属性条件删除                                xe.RemoveAllAttributes()                          '将其下所有 属性移除                            End If                        Next                    End If                End If                '----            End If            '----            '----            xmlDoc.Save(filename)            MessageBox.Show("数据已删除!")        Catch 'ex As Exception        End Try    End Sub 


[解决办法]
以下是相关XML文件内容,你对照着看。

XML code
<?xml version="1.0" encoding="utf-8" ?> - <Kjx_Config>- <XSQ_SerialPort Id="COM1" download="1" Company="华宇科技">  <BaudRate>38400</BaudRate>   </XSQ_SerialPort>- <TX1_SerialPort Id="COM2">  <BaudRate>9600</BaudRate>   <DataBits>8</DataBits>   <Paritys>None</Paritys>   <StopBits>One</StopBits>   <HandShake>None</HandShake>   </TX1_SerialPort>- <TX2_SerialPort Id="COM3">  <BaudRate>9600</BaudRate>   <DataBits>8</DataBits>   <Paritys>None</Paritys>   <StopBits>One</StopBits>   <HandShake>None</HandShake>   </TX2_SerialPort>- <TX3_SerialPort Id="COM4">  <BaudRate>9600</BaudRate>   <DataBits>8</DataBits>   <Paritys>None</Paritys>   <StopBits>One</StopBits>   <HandShake>None</HandShake>   </TX3_SerialPort>- <Tcp_Server Port="502" No_Command_Time="30">  <Connection_interval>0</Connection_interval>   <Abnormal_times>5</Abnormal_times>   <Delay_answer>0</Delay_answer>   </Tcp_Server>- <Zb_Data_Solutions Number="32">  <Switch Num="1" Type="1" Tx="1">Mb_Hy1</Switch>   <Switch Num="2" Type="1" Tx="2">Mb_Hy1</Switch>   <Switch Num="3" Type="1" Tx="3">Mb_Hy1</Switch>   <Switch Num="4" Type="1" Tx="1">Mb_Hy1</Switch>   <Switch Num="5" Type="1" Tx="2">Mb_Hy1</Switch>   <Switch Num="6" Type="1" Tx="3">Mb_Hy1</Switch>   <Switch Num="7" Type="1" Tx="1">Mb_Hy1</Switch>   <Switch Num="8" Type="1" Tx="2">Mb_Hy1</Switch>   <Switch Num="9" Type="2" Tx="3">Mb_Hy2</Switch>   <Switch Num="10" Type="2" Tx="1">Mb_Hy2</Switch>   <Switch Num="11" Type="2" Tx="2">Mb_Hy2</Switch>   <Switch Num="12" Type="2" Tx="3">Mb_Hy2</Switch>   <Switch Num="13" Type="2" Tx="1">Mb_Hy2</Switch>   <Switch Num="14" Type="2" Tx="2">Mb_Hy2</Switch>   <Switch Num="15" Type="2" Tx="3">Mb_Hy2</Switch>   <Switch Num="16" Type="2" Tx="1">Mb_Hy2</Switch>   <Switch Num="17" Type="1" Tx="2">Mb_Hy1</Switch>   <Switch Num="18" Type="1" Tx="3">Mb_Hy1</Switch>   <Switch Num="19" Type="1" Tx="1">Mb_Hy1</Switch>   <Switch Num="20" Type="1" Tx="2">Mb_Hy1</Switch>   <Switch Num="21" Type="1" Tx="3">Mb_Hy1</Switch>   <Switch Num="22" Type="1" Tx="1">Mb_Hy1</Switch>   <Switch Num="23" Type="1" Tx="2">Mb_Hy1</Switch>   <Switch Num="24" Type="1" Tx="3">Mb_Hy1</Switch>   <Switch Num="25" Type="2" Tx="1">Mb_Hy2</Switch>   <Switch Num="26" Type="2" Tx="2">Mb_Hy2</Switch>   <Switch Num="27" Type="2" Tx="3">Mb_Hy2</Switch>   <Switch Num="28" Type="2" Tx="1">Mb_Hy2</Switch>   <Switch Num="29" Type="2" Tx="2">Mb_Hy2</Switch>   <Switch Num="30" Type="2" Tx="3">Mb_Hy2</Switch>   <Switch Num="31" Type="2" Tx="1">Mb_Hy2</Switch>   <Switch Num="32" Type="2" Tx="2">Mb_Hy2</Switch>   </Zb_Data_Solutions>  <Pwd_Register Registration_code="EF2BBE3FDD6A5DD9C798E2BDF1D7759623EF64D7CA25F4ACE650B587732864B2" />   </Kjx_Config> 

热点排行