- ベストアンサー
VB2005でXMLデータの要素があるかどうかの判定について
- VB2005でXMLデータの要素が存在するかどうかを判定する方法について教えてください。
- XMLデータをMSXMLでパーサーにかけて全項目を抽出していますが、要素が省略される場合にエラーが発生してしまいます。指定したパスの要素の有無を判定する方法はありますか?
- 項目を抽出する方法としては、selectsingleNodeメソッドを使用していますが、省略される可能性がある場合は別の方法を使用する必要があるのでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
関連するQ&A
- VB2005でXMLデータから複数ある要素の入れ子を取得する方法
VB2005、XML の初心者です。 VB2005でXMLデータをMSXMLで解析していますが、下記のようなXMLの場合、Itemがうまく解析できません。 Module > Parent > Item という親子関係ですが、 全て数は可変です。(子がない場合もあります。) <Body> <Content> <Module> </Module> <Module> <Parent> <Item>A</Item> </Parent> </Module> <Module> <Parent> <Item>AA</Item> <Item>BB</Item> <Item>CC</Item> </Parent> </Module> <Module> </Module> </Content> </Body> ソースは下記です。 Dim LmsxmlDoc As MSXML2.DOMDocument LmsxmlDoc = New MSXML2.DOMDocument LmsxmlDoc.LoadXml(XMLData) Dim LModules As MSXML2.IXMLDOMNodeList '下記Moduleは取得できる LModules = LmsxmlDoc.SelectNodes("/Body/Content/Module") Dim LItems As MSXML2.IXMLDOMNodeList Dim LmsxmlModule As MSXML2.DOMDocument LmsxmlModule = New MSXML2.DOMDocument For Each LModule As MSXML2.IXMLDOMNode In LModules '下記(1)でも(2)でもItemが取得できない (1)LItems = LModule.selectNodes("/Module/Parent/Item") LmsxmlModule.LoadXml(LModule.Xml) (2)LItems = LmsxmlModule.selectNodes("/Module/Parent/Item") For Each LItem As MSXML2.IXMLDOMNode In LItems '処理 Next Next 上記ソースでは、(1)、(2)のどちらの方法でもなぜかItemが取得できません。 Itemを取得するにはどうすれば良いのでしょうか。 ヒントでも良いので、皆様の知恵をお借りできれば幸いです。 よろしくお願い致します。
- ベストアンサー
- Visual Basic
- VB2005でXMLデータから複数ある要素の数を読み取る方法
VB2005、XMLの初心者です。 VB2005でXMLデータを読み取って、DBに登録するプログラムを作っています。 XMLデータから項目を読み取るのは、下記のようにパスを指定してできることが分りました。 CreatorInfodNode = xmlDoc.SelectNodes("/Mml/Body/Module", nsmgr1) ID = CreatorInfodNode(0).InnerText.Trim しかし、下記のような同じ要素が複数あるXMLデータの場合、全ての要素を解析してDBに登録したいのですが、要素の数はどうやって読み取れば良いのでしょうか。ちなみに、要素の数は可変です。 上記のパスを指定する場合、要素のタグが同じなら全てパスは同じになり、最初の要素を取ってくるようですが、複数ある場合は全てを解析したいです。 <Mml> <Body> <Module>A</Module> <Module>B</Module> <Module>C</Module> </Body> </Mml> 何かヒントになるようなことでも良いので、皆様の知恵をお借りできれば幸いです。 よろしくお願い致します。
- ベストアンサー
- Visual Basic
- VB2005でXMLから複数ある要素の項目を取得する方法
VB2005、XMLの初心者です。 下記XMLの「ヤマダタロウ」を抽出するのがうまくいきません。 <Module> <Body> <Item Code= A TableId=001> <Name>ヤマダタロウ</Name> </Item> <Item Code= B TableId=001> <Name>山田太郎</Name> </Item> </Body> </Module> 上記XMLがmsxmlDocとして引数で下記プロシージャに渡されるのですが、selectNodesではなぜか取得できません。 どこか間違っているでしょうか。 Private Sub prvParseXML(Byval msxmlDoc As MSXML2.DOMDocument) Dim NodeList As MSXML2.IXMLDOMNodeList NodeList = msxmlDoc.selectNodes("/Module/Body/Item[@Code='A'][@tableId='001']/Name") End Sub 何かヒントになるようなことでも良いので、皆様の知恵をお借りできれば幸いです。 よろしくお願い致します。
- ベストアンサー
- Visual Basic
- VB2005でXMLのテキストデータをXMLデータにするには?
VB2005の初心者です。 タグ付きのXMLのテキストデータを読み込んで、項目ごとにDBに登録したいのですが、やり方が分りません。 テキストデータをXMLデータ、もしくはノード、もしくはデータセット型に変換しなければならないと思うのですが、そのやり方を教えていただきたいです。 ちなみに、XMLデータをテキストデータにするのは下記のとおりでできました。この strText を逆にXMLデータに変換したいです。 Dim xmlDoc As MSXML2.DOMDocument = New MSXML2.DOMDocument Dim strText As String xmlDoc.PreserveWhitespace = True xmlDoc.Load("C:XMLData.xml") strText = xmlDoc.xml 何かヒントでも良いので、たくさんの方の知恵をお借りしたいです。
- ベストアンサー
- Visual Basic
- VB.NET XML要素取り出し
VB.NETでXMLに関して質問です 下記のようなXML <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <list> <Vegetablefolder> <folder id="1" path="Vegetablelist/allVegetable.xml" name="すべての野菜"/> <folder id="2" path="Vegetablelist/tomato.xml" name="トマト"/> <folder id="3" path="Vegetablelist/kyuri.xml" name="きゅうり"/> </Vegetablefolder> <picture> <select bg="bg/select.jpg"/> </picture> </list> を読み取り要素であるid、path、nameの内容を変数に入れるプログラムを作成しようと思っています そこで下記のようなプログラム Dim xDocument As Xml.XmlDocument = New Xml.XmlDocument Dim xRoot As Xml.XmlElement Dim xVegetablefolderlist As Xml.XmlNodeList Dim xfolderlist As Xml.XmlNodeList Dim xpicturelist As Xml.XmlNodeList Dim xselectlist As Xml.XmlNodeList 'XMLファイルの呼び出し() Call xDocument.Load(My.Settings.flistpass) 'XMLドキュメントからルート要素を取り出す() xRoot = xDocument.DocumentElement 'XMLのルートが発見できなかった時() If xRoot Is Nothing Then MessageBox.Show("folderlist.xmlの記述が誤っています。", _ "エラー", _ MessageBoxButtons.OK, _ MessageBoxIcon.Error) GoTo exi End If xmusicfolderList = xRoot.GetElementsByTagName("Vegetablefolder") For Each xElement1 As Xml.XmlElement In xVegetablefolderlist Call MessageBox.Show(String.Format("データあり : {0}個", xVegetablefolderlist.Count)) xfolderlist = xElement1.GetElementsByTagName("folder") Call MessageBox.Show(String.Format("データあり : {0}個", xfolderlist.Count)) '項目一覧から<folder>項目を取り出す For Each xfolder As Xml.XmlDocument In xfolderlist '<folder>属性を読み取る ??? Next xfolder Next xElement1 xpicturelist = xRoot.GetElementsByTagName("picture") For Each XElement2 As Xml.XmlElement In xpicturelist Call MessageBox.Show(String.Format("データあり : {0}個", xpicturelist.Count)) xselectlist = XElement2.GetElementsByTagName("select") For Each xselect As Xml.XmlDocument In xselectlist Call MessageBox.Show(xselect.SelectSingleNode("@bg").Value) Next xselect Next XElement2 を試しに作成したのですが、属性を読み取り変数に格納するところの記述に困っています(???の部分) <folder>の項目は一定では無く、例は3つですがもっと多い場合もあるので 配列を使うのが適切だと思うのですがどのように記述するのが適切でしょうか? アドバイスをお願いします
- 締切済み
- Visual Basic
- VB.NETSystem.Xml 要素数を得るには
VB.NETでSystem.Xmlを参照設定して以下のXMLファイル(test.xml)のsub4_9のtestの個数を得たいのですが domNode = domDoc.SelectSingleNode("top/sub4_9/test") Console.WriteLine("Count of top/sub4_9/test = " & domNode.?????) というようにしましたが?????の部分にLengthやCountがありません。 また、 rootElement = domDoc.DocumentElement domNodeList = rootElement.GetElementsByTagName("sub4_9/test") Console.WriteLine("Count of top/sub4_9/test = " & domNodeList.Count) というようにもしてみましたが個数は誤った0が返されます。 どのように記述すればsub4_9のtestの個数を得ることができるでしょうか。 ----test.xml------------- <top> <sub1_1> <test>123</test> <test>451</test> : </sub1_1> : <sub4_9> <test>432</test> <test>123</test> <test>745</test> : </sub4_9> : <sub9_5> <test>222</test> : </sub9_5> </top> --VB.NET------------------------ Imports System.Xml Imports System.IO Module Module1 Sub Main() Dim domDoc As New XmlDocument Dim domNode As XmlNode Dim domNodeList As XmlNodeList Dim rootElement As XmlElement domDoc.Load("test.xml") rootElement = domDoc.DocumentElement domNode = domDoc.SelectSingleNode("top/sub4_9/test") Console.WriteLine("Count of top/sub4_9/test = " & domNode.?????) domNodeList = rootElement.GetElementsByTagName("sub4_9/test") Console.WriteLine("Count of top/sub4_9/test = " & domNodeList.Count) End Sub End Module ----------------------------------- よろしくお願いします (WindpwsXP,VisualStudio2010)
- ベストアンサー
- Visual Basic
- VB2005でXMLデータをParserを使って項目を抽出する方法
VB2005の初心者です。 XMLデータをパーサーをかけて、特定の項目を抽出してDBに登録したいのですが、パーサーの機能(?)で特定の項目を抽出することはできるのでしょうか。 下記のように、msxmldocにLoadした後、タグ名で検索して特定の項目を抽出する方法はあるのでしょうか。 Dim msxmlDoc As MSXML2.DOMDocument msxmlDoc = New MSXML2.DOMDocument msxmldoc.Loadxml(strFullText) 何かヒントでも、他の方法でも、たくさんの方の知恵をお借りしたいです。よろしくお願い致します。
- ベストアンサー
- Visual Basic
- XMLの要素の内容の中に要素
VisualBasic6.0にて、XMLを作成するプログラムを作っています。 XMLの作成、編集はMSXMLを使用しており、編集保存はできたのですが、下記のような要素の出力の仕方がわかりません。 <Node1> あいうえお <Node1-1>abcde</Node1-1> かきくけこ </Node1> このように要素の文字列の途中に子要素を作成したいです。 「Node1」要素に、子要素「Node1-1」を追加するサンプルです。 Cドライブ直下に以下の内容のXMLファイル「test.xml」を作成 <?xml version="1.0" encoding="shift_jis"?> <Node1> </Node1> VB6にて、参照設定に「Microsoft XML V6.0」を追加し以下のコードを作成。 Private Sub Command1_Click() Dim xDoc As MSXML2.DOMDocument Set xDoc = New MSXML2.DOMDocument Dim node As IXMLDOMNodeList Dim Addnode As IXMLDOMNode Dim obj As IXMLDOMNode If xDoc.Load("C:\test.xml") Then Set node = xDoc.documentElement.selectNodes("/Node1") For Each obj In node Set Addnode = obj.appendChild(xDoc.createNode(NODE_ELEMENT, "Node1-1", "")) Addnode.Text = "abcde" Next xDoc.save ("C:\test.xml") End If Set xDoc = Nothing End Sub
- ベストアンサー
- Visual Basic
- vb6 XMLファイル出力について<S></S>
vb6にてXMLファイル出力のプログラムを作成しています。 XMLファイル内容 <?xml version="1.0" encoding="UTF-8"?> <root> <key>AA</key> <string>aa</string> <key>BB</key> <string/> </root> 上記の<string/>の部分を<string></string>のように出力したいのですが、 どうしても上手くいきません。 下記にソースを記載します。 何か少しでもお分かりになる情報がありましたらご教授願いします。 よろしくお願いします。 Dim xmlDoc As MSXML2.DOMDocument 'XMLドキュメント Dim xmlPI As IXMLDOMProcessingInstruction 'XML宣言 Dim node(50) As IXMLDOMNode '要素 Dim attr As MSXML2.IXMLDOMAttribute '属性 'XMLドキュメントを作成 Set xmlDoc = New MSXML2.DOMDocument 'XML宣言を追加 Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")) '<root>要素を追加 Set node(1) = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, "root", "")) '<key>要素を追加 Set node(2) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "key", "")) node(2).Text = "AA" '<string>要素を追加 Set node(3) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "string", "")) node(3).Text = "aa" '<key>要素を追加 Set node(4) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "key", "")) node(4).Text = "BB" '<string>要素を追加 Set node(5) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "string", "")) node(5).Text = "" 'XMLドキュメントの出力 Dim strXMLFile As String strXMLFile = Format(Date, "yyyymmdd") & Format(Time, "hhmmss") xmlDoc.save ("C:TEST\TEST.xml") '終了処理 If Not xmlDoc Is Nothing Then Set xmlDoc = Nothing If Not xmlPI Is Nothing Then Set xmlPI = Nothing
- 締切済み
- Visual Basic
- XMLデータをパーサーをかけてテキストデータにするには?
VB2005の初心者です。 XMLファイルを読み込んで、パーサーをかけてテキストデータにしたいのですが、やり方が分りません。 (パーサーを使わずにテキストデータにすることはできます。) ご存知の方は、ヒントでも良いので教えていただきたいです。 仕事で行き詰っているため、たくさんの方の情報をいただけると幸いです。 下記は、パーサーを使わないやり方です。 Dim xmlDoc As XmlDocument = New XmlDocument Dim strText As String xmlDoc.PreserveWhitespace = True xmlDoc.Load("C:\XMLData.xml") strText = xmldoc.OuterXml パーサーを使う場合、下記のようになると思うのですが、 どのようにテキストデータにすれば良いのか分りません。 (OuterXmlが使えません。) Dim xmlDoc As MSXML2.DOMDocument = New MSXML2.DOMDocument Dim strText As String xmlDoc.PreserveWhitespace = True xmlDoc.Load("C:\XMLData.xml") よろしくお願い致します。
- ベストアンサー
- Visual Basic
お礼
redfox63様、毎回、回答ありがとうございます! isnot nothing という判定の仕方を初めて知りました。 教えていただいた方法で、項目があるか判定できました。 本当にありがとうございました!!