トップ回答者
xmlファイルの追加更新はどうやってするのでしょうか。

質問
-
毎度初心の質問ですいません。
xmlファイルの更新についてですが、書き直すしかないのなら仕方ありませんが、AppendChildというものが
あるので、気になります。
Dim reader As XmlReader = XmlReader.Create("C:\○○○_log.xml")
Dim st As String = ""
While reader.Read()
st = st + reader.ReadOuterXml ’------①
End WhileDim doc As New XmlDocument()
doc.LoadXml(st)
reader.Close()
Dim settings As New XmlWriterSettings()
settings.Indent = True
settings.IndentChars = " "
Dim writer As XmlWriter = XmlWriter.Create("C:\○○○_log.xml", settings)Dim root As XmlNode = doc.DocumentElement
Dim elem As XmlElement = doc.CreateElement("table")
elem.InnerText = "あいうえお"
root.AppendChild(elem)
root.WriteTo(writer)writer.Flush()
①の段階で、追加項目を書き換えることはできますが、それならAppendChildの意味がありません。なんかちゃんとした方法があるのでしょうか。
よろしくお願いします。
回答
-
まどか様
いつもご指導ありがとうございます。
ヘルプに例が載っていたので、簡単なのはできました。
しかし、xmlwriter でかけるような複雑なものができなかったのです。
もう一度、その路線でやってみます。
ついでですが、これができると楽なんですが、
Dim settings As XmlWriterSettings = New XmlWriterSettings()
settings.OmitXmlDeclaration = true
settings.ConformanceLevel = ConformanceLevel.Fragment
settings.CloseOutput = false
' Create the XmlWriter object and write some content.
Dim strm as MemoryStream = new MemoryStream()
Dim writer As XmlWriter = XmlWriter.Create(strm, settings)
writer.WriteElementString("orderID", "1-456-ab")
writer.WriteElementString("orderID", "2-36-00a")
writer.Flush()
writer.Close()MSDNの英語版に載っていたのですが、2005でもavailableと書いてあるのですが、
strmの値はNullのまま、Positionは0のままです。どうしてでしょうか。
#LoadXml メソッドはファイル名も渡せますよ。
これはこれを書いた後直ぐにわかりました。
どうも、初心で申し訳ございません。
すべての返信
-
まどか様
いつもご指導ありがとうございます。
ヘルプに例が載っていたので、簡単なのはできました。
しかし、xmlwriter でかけるような複雑なものができなかったのです。
もう一度、その路線でやってみます。
ついでですが、これができると楽なんですが、
Dim settings As XmlWriterSettings = New XmlWriterSettings()
settings.OmitXmlDeclaration = true
settings.ConformanceLevel = ConformanceLevel.Fragment
settings.CloseOutput = false
' Create the XmlWriter object and write some content.
Dim strm as MemoryStream = new MemoryStream()
Dim writer As XmlWriter = XmlWriter.Create(strm, settings)
writer.WriteElementString("orderID", "1-456-ab")
writer.WriteElementString("orderID", "2-36-00a")
writer.Flush()
writer.Close()MSDNの英語版に載っていたのですが、2005でもavailableと書いてあるのですが、
strmの値はNullのまま、Positionは0のままです。どうしてでしょうか。
#LoadXml メソッドはファイル名も渡せますよ。
これはこれを書いた後直ぐにわかりました。
どうも、初心で申し訳ございません。
-
まどか様のアドバイスでできるようになりました。
一度はあきらめて、ファイル形式でやってたんですけど、どっちがいいのでしょうか。
こんな感じです。
Dim doc As XmlDocument = New XmlDocument
doc.LoadXml(st)
Dim root As XmlNode = doc.DocumentElement
Dim elem As XmlElement = doc.CreateElement("table")
Dim ele2 As XmlElement = doc.CreateElement("TABLEName")
ele2.InnerText = "TESTtable"
elem.AppendChild(ele2)
Dim el(100) As XmlElement
Dim attr As XmlAttribute
Dim att2 As XmlAttribute
For i As Integer = 0 To FCount - 1
el(i) = doc.CreateElement("Field")
attr = el(i).SetAttributeNode("FieldNo", "")
attr.Value = i.ToString
att2 = el(i).SetAttributeNode("Name", "")
att2.Value = Field(i)
elem.AppendChild(el(i))
Next
root.InsertAfter(elem, root.LastChild)
doc.Save(gCpath + gDBLog)
要素の値を変更するのは、selectsingleを使うのですね。doc.LoadXml(pah)のところに、ファイルパスを入れると、1行目の1番が不正とされます。