0

VBA を使用して、以下の XML サンプルの特定の「フィールド」を解析しようとしています。たとえば、「Field1」の値を具体的に解析して、変数にスローしたいとします。いろいろと悩んでいます。

サンプルコードの一部を次に示します。

Sub test()
Set oXML = New MSXML2.DOMDocument      
oXML.async = False
oXML.validateOnParse = False
oXML.Load ("C:\sample.xml")
Set oXmlNodes = oXML.selectNodes("/")

For Each oXmlNode In oXmlNodes
 Debug.Print oXmlNode.Text
Next

End Sub

XML は次のとおりです。

<?xml version="1.0" encoding="UTF-8" ?> 
<form>
 <metadata>
 <prop name="formName">
 <value>myTestForm</value> 
 </prop>
 <prop name="formIdentifier">
 <value>0000033</value> 
 </prop>
 </metadata>
 <field name="field1" type="String">
 <value>something</value> 
 </field>
 <field name="field2" type="String">
 <value>something else</value> 
 </field>
</form>
4

1 に答える 1

2

あなたのサンプル XML は整形式ではありません: 一致する開始タグのない "prop" 終了タグがあります:

<form>
 <metadata>

     <value>myTestForm</value> 
   </prop>
   <prop name="formIdentifier">
     <value>0000033</value> 
   </prop>
 </metadata>

次のように prop タグを追加してみてください。

<form>
 <metadata>
   <prop name="formName">
     <value>myTestForm</value> 
   </prop>
   <prop name="formIdentifier">
     <value>0000033</value> 
   </prop>
 </metadata>

コードでは、解析エラーを確認する必要があります。

oXML.Load ("C:\sample.xml")
if (oXML.parseError.errorCode != 0) ...

アップデート

私の投稿で修正されましたが、明らかに特定の値を解析する方法がわかりません。

ルート ノードを選択する XPATH 式「/」を使用しています。必要なノードを選択するには、これを変更する必要があります。何が必要かは明確ではありませんが、すべての「フィールド」ノードを選択することから始めることができます。

Set oXmlNodes = oXML.selectNodes("//field")

または、より具体的な例として、次の例では、ルート フォーム ノードの子であり、属性 name='field1' を持つフィールド ノードが選択されます。

Set oXmlNodes = oXML.selectNodes("/form/field[@name='field1']")

これで解決しない場合は、必要なものに関する詳細情報を投稿するか、XPATH チュートリアルを参照してください。

于 2013-05-22T14:21:28.327 に答える