2016-06-22 13 views
2

は、私はVBスクリプトを使用してExcelにこれをインポートする以下のXMLインポートするXMLデータを、SELECTNODESが動作しない(何も返しません)

<cqresponse xmlns="http://ibm.com/rational/cqweb/v7.1"> 
<rows> 
    <row> 
     <id> 
      <![CDATA[ ABC00082474 ]]> 
     </id> 
     <Short_Desc> 
      <![CDATA[ 
      Some Description 1 
      ]]> 
     </Short_Desc> 
     <State> 
      <![CDATA[ Some State 1 ]]> 
     </State> 
    </row> 
    <row> 
     <id> 
      <![CDATA[ ABC00082475 ]]> 
     </id> 
     <Short_Desc> 
      <![CDATA[ 
      Some Description 2 
      ]]> 
     </Short_Desc> 
     <State> 
      <![CDATA[ Some State 2 ]]> 
     </State> 
    </row> 
</rows> 
</cqresponse> 

を持っています。私は以下のコードを持っていましたが、SelectNodesは何も返していません。それはちょうどNothingを返します

Sub Test() 
    Dim nodeList As IXMLDOMNodeList 
    Dim nodeRow As IXMLDOMNode 
    Dim nodeCell As IXMLDOMNode 
    Dim rowCount As Integer 
    Dim cellCount As Integer 
    Dim rowRange As Range 
    Dim cellRange As Range 
    Dim sheet As Worksheet 
    Dim xpathToExtractRow As String 
    Dim dom As DOMDocument60 

    xpathToExtractRow = "/cqresponse/rows/row" 

    Set dom = New DOMDocument60 
    dom.Load ("C:\ABC.xml") ' this file contains the same xml data as mentioned above 
    Set sheet = ActiveSheet 
    Set nodeList = dom.SelectNodes(xpathToExtractRow) 

    rowCount = 0 
    For Each nodeRow In nodeList 
     rowCount = rowCount + 1 
     cellCount = 0 
     For Each nodeCell In nodeRow.ChildNodes 
      cellCount = cellCount + 1 
      Set cellRange = sheet.Cells(rowCount, cellCount) 
      cellRange.Value = nodeCell.Text 
     Next nodeCell 
    Next nodeRow 
End Sub 

これに何か問題がありますか、別のアプローチをとる必要がありますか?

+1

それがVBAまたはVB.NETです、これらは、2つの異なる言語があります。 – litelite

+0

私はVBAを意味していませんでした。理由はわかりません。なぜなら、時には件名にvb.netが表示されるからです。 – Santosh

+0

そのようにタグ付けされているからです。他のユーザーが投稿を編集して削除しました。 – litelite

答えて

2

XML解析でよく誤っているのは、ルートの宣言されていない名前空間です。その結果、ドキュメントの解析中に名前空間接頭辞を割り当て、XPath式でそのような接頭辞を使用する必要があります。以下は、ドキュメントが割り当てられます。

... 
Dim xpathToExtractRow As String, XMLNamespaces As String 
Dim dom As DOMDocument60 

xpathToExtractRow = "/doc:cqresponse/doc:rows/doc:row" 
XMLNamespaces = "xmlns:doc='http://ibm.com/rational/cqweb/v7.1'" 

Set dom = New DOMDocument60 
dom.Load ("C:\ABC.xml") 
dom.setProperty "SelectionNamespaces", XMLNamespaces 
... 
+0

優秀!迅速な対応に感謝します。私はすぐにそれをテストすることができませんでしたが、今私はテストし、それはうまく動作します。 – Santosh

関連する問題