属性の追加について
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2020/8/21 14:35:43
とりあえずこんな感じ。
ノード末尾の改行が必須かどうか、とか、encoding 指定が必要かどうかなどで、
いろいろ書き方が変わってきます。LoadOptions や SaveOptions は適宜調整を。
ノード末尾の改行が必須かどうか、とか、encoding 指定が必要かどうかなどで、
いろいろ書き方が変わってきます。LoadOptions や SaveOptions は適宜調整を。
Dim doc = XDocument.Load("D:\TEMP\Sample.xml", LoadOptions.PreserveWhitespace)
Dim newSite = <Site Location="d">C:\temp</Site>
doc.Root.Add(newSite)
doc.Root.Add(vbCrLf)
doc.Save("D:\TEMP\Sample2.xml")
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2020/8/21 15:21:43
> とりあえずこんな感じ。
実行結果はこうなります。
指定通り、Locatin ではなく Location として追加されていることが分かりますね。
なお先のコードだと、BOM 付の UTF-8 エンコードで出力されます。
もしも BOM 無しで出力したいなど、別の Encoding で出力したいのであれば
Encoding を明示した XmlTextWriter に Save するようにしてみてください。
実行結果はこうなります。
指定通り、Locatin ではなく Location として追加されていることが分かりますね。
なお先のコードだと、BOM 付の UTF-8 エンコードで出力されます。
もしも BOM 無しで出力したいなど、別の Encoding で出力したいのであれば
Encoding を明示した XmlTextWriter に Save するようにしてみてください。
Using writer As New XmlTextWriter("D:\TEMP\Sample3.xml", New UTF8Encoding(False))
doc.Save(writer)
End Using
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2020/8/21 21:23:28
> 下記のように属性を持つノード"Site"を属性"Location="d"を持たせて
> 新たに追加しようとしています。
もしかして、既存の Site ノードに Location="d" な属性を付与するという話でしょうか?
だとしたらこう書けます。
> 新たに追加しようとしています。
もしかして、既存の Site ノードに Location="d" な属性を付与するという話でしょうか?
だとしたらこう書けます。
Dim doc = XDocument.Load("D:\TEMP\Sample.xml")
For Each site In doc.<DataPath>.<Site>
site.SetAttributeValue("Location", "d")
Next
'MsgBox(doc.ToString())
doc.Save("D:\TEMP\Sample2.xml")
下記のように属性を持つノード"Site"を属性"Location="d"を持たせて
新たに追加しようとしています。
どのように書き込むとうまくいきますでしょうか?
知識のある方ご回答よろしくお願いします。
<DataPath>
<Site Locatin="a">C:\temp</Site>
<Site Locatin="b">C:\temp</Site>
<Site Locatin="c">C:\temp</Site>
</DataPath>