掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
XMLファイルのタグの属性を読み取るには? (ID:116324)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
[魔界の仮面弁士 2004/09/16(木) 01:20:08] > 誤) For Each N In xDoc.selectNodes("//*|//@*") > 正) For Each N In xDoc.selectNodes("//*|//@*|//text()") > # コメントノードや処理命令ノードは無視して良いのかな? もし、コメントノードや処理命令ノードも加えるなら、 For Each N In xDoc.selectNodes("//*|//@*|//text()|//comment()|//processing-instruction()") という感じで。 [初心者さん 2004/09/17(金) 09:34:57] >(データのあるものだけが出力される) 微妙な表現ですね。(^^;) この場合の『データ』が、何を表しているのかが曖昧です。 # 「<a><b /></a>」というXMLなら、要素ノード"a"は、要素ノード"b"というデータを # 持っているという見方もできますし…。 とりあえず、この場合の『データ』は、「テキストノード」と「属性値」の事だと 思いますが、その場合、white-space の扱いはどうされますか? 1.「<AA />」 2.「<AA></AA>」 3.「<AA> </AA>」 の場合、XML的には 1 と 2 は等価ですが、3 は別ですよね。 3の場合、空白一つのテキストノードが存在しますから。 今回の場合、空白だけでなく、改行まで含まれていますので、 ほとんどの要素ノードに「データが含まれている」と思いますよ。 [初心者 2004/09/17(金) 09:34:57] > 下記のような出力を望んでいます。 一応、こちらでもサンプルを書いてみました。 とりあえず、white-spaceのみのテキストノードは無視させていますが、 <car> あ <name /> い <price /> う </car> のような時には、どのような出力結果を望んでいるのかが分からなかったため、 「要素ノードとテキストノードが並んでいる場合」については考慮していません。 このようなケースにも対応させたい場合は、適宜、コードを書き変えてください。 '====================================================== 'エラー処理は省略してあります。 Option Explicit Private Sub Main() Dim oDoc As DOMDocument Set oDoc = CreateObject("MSXML2.DOMDocument.4.0") oDoc.async = False oDoc.preserveWhiteSpace = True oDoc.Load "C:\Sample.xml" oDoc.setProperty "SelectionLanguage", "XPath" Dim S As String Dim N As IXMLDOMNode Dim W As IXMLDOMNode For Each N In oDoc.selectNodes("//*[@*]|//*[not(*) and normalize-space(text())!=' ']|//comment()") If N.nodeType = NODE_COMMENT Then Debug.Print "(コメント):" Debug.Print Tab(4); N.nodeValue Else S = N.nodeName For Each W In N.Attributes Debug.Print S; "("; W.nodeName; "):" '属性値が空の時は、属性名だけ出力する If W.nodeValue <> "" Then Debug.Print Tab(4); W.nodeValue End If Next If N.Text <> "" Then 'テキストノードが空の時は、要素名も出力しない Debug.Print S; ":" Debug.Print Tab(4); N.Text End If End If Next Set oDoc = Nothing End Sub ========== C:\Sample.xml (UTF-8、サイズ=573バイト) ============ <cars> <car> <name>乗用車</name> <price currency="dollar">150</price> </car> <car> <name>トラック</name> <price currency="dollar"/><!--テキストノードが無い場合--> </car> <car> <name><![CDATA[オープンカー]]></name><!--CDATAセクションが使用されている場合--> <price currency="dollar" currency2="US-dollar">200</price><!--属性が2つある場合--> </car> <car> <name></name><!--空要素だが終了タグを持つ場合--> <price currency="" /><!--属性値が空の場合--> </car> </cars> ================================================================== > MSXML4の使い方などが載っているページがみつけられないのですが、 Microsoft の ダウンロードセンターから、MSXML4 の SDK をダウンロードしてみてください。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.