たかしと申します。
宜しくお願い致します。
以下のようなXMLファイルがあります。
<sample>
<test>文字列</test>
</sample>
上記の「文字列」の部分を、Domを使用し変更したいのですが、できません。
ご存知の方がおりましたら、ご教授お願い致します。
また、以下にソースを記述致します。
ご指摘お願い致します。
If xNode.nodeType = NODE_ELEMENT Then
If xNode.nodeName = "sample"
If xNode.nodeName = "test" Then
'ここで変更したいのですが、うまくいきません。
Nodes.Item(0).firstChild.nodeValue = "変更文字列"
End If
End If
End If
> If xNode.nodeName = "sample"
>
> If xNode.nodeName = "test" Then
1) Thenが足りません。
2) xNode.nodeNameの値が、"sample" と "test" の両方に一致する事は
ありえませんので、上記の内側のIf文は実行されません。
# 間に、『Set xNode = xNode.firstChild』があるのかな?
> 'ここで変更したいのですが、うまくいきません。
> Nodes.Item(0).firstChild.nodeValue = "変更文字列"
Nodesというのは、恐らくノードリストを指しているのだとは思いますが、
この時点では、具体的にどのノードリストを表わしているのかが不明瞭なので、
何とも言えません。
ただ、少なくとも手元のMXSML4では、nodeValueプロパティやtextプロパティを
使って、テキストノードの値を修正することができました。
魔界の仮面弁士さんありがとうございます。
誤ったソースを記述してしまい大変申し訳ございませんでした。
実際のソースは、
Public Sub Gethonbundata()
Dim xDoc As MSXML.DOMDocument
Set xDoc = New MSXML.DOMDocument
xDoc.validateOnParse = False
If xDoc.Load("・・・test.xml") Then
'関数呼出
InchonbunData xDoc.childNodes, 0
Else
End If
End Sub
Public Sub InchonbunData(ByRef Nodes As MSXML.IXMLDOMNodeList, _
ByVal Indent As Integer)
Dim xNode As MSXML.IXMLDOMNode
Dim textdata As String
Indent = Indent + 2
For Each xNode In Nodes
If xNode.nodeType = NODE_ELEMENT Then
If xNode.nodeName = "test" Then
'ここで変更したいのですが、うまくいきません。
Nodes.Item(0).firstChild.nodeValue = "変更文字列"
End If
End If
If xNode.hasChildNodes Then
InchonbunData xNode.childNodes, Indent
End If
Next xNode
End Sub
です。これを実行し、XMLファイルを開いてみると、「文字列」のままと
なってしまいます。
大変申し訳ございませんが、ご教授お願い致します。
> If xDoc.Load("・・・test.xml") Then
この前に、asyncプロパティを設定しましょう。
> Public Sub InchonbunData(ByRef Nodes As MSXML.IXMLDOMNodeList, _
> ByVal Indent As Integer)
第2引数だけでなく、第1引数もByValで良いかと思います。
> If xNode.nodeName = "test" Then
> Nodes.Item(0).firstChild.nodeValue = "変更文字列"
> End If
これでも誤りではありませんが、折角、ノードを列挙しているのから、
わざわざノードリストから辿らなくても、
xNode.text = "変更文字列"
で十分かと思います。
MSXML独自のメソッドを使わず、W3C標準仕様のメソッドだけで書くなら、
If xNode.firstChild.nodeType = NODE_TEXT Then
xNode.firstChild.nodeValue = "変更文字列"
End If
といったところですかね。
> です。これを実行し、XMLファイルを開いてみると、「文字列」のままと
まず、DOMDocumentの内容が編集されているかどうかを確かめてみてください。
内容の確認には、xmlプロパティが利用できます。
Debug.Print xDoc.documentElement.xml
もし、DOMDocument自体は編集されていたとしたら、それをXMLファイルに
saveする部分のコードに問題があるのだと思います。
魔界の仮面弁士さん、ありがとうございました。
魔界の仮面弁士さんがおっしゃるとおり、saveする部分に
問題がありました。
本当にありがとうございました。
ツイート | ![]() |