私は、を本当にと私は信じていますが、私はVBAを使用してXMLの初心者です。私が見たすべての例では、「シンプルな」XMLと呼ばれるものを使用しています。私の例は(私にとっては)もっと複雑に思えます。 (私はブロック引用符でそれを追加するために管理することができる場合)まず第一に、ここに私のXMLの簡単な抽出物は、VBAを使用してファイルからXML値を抽出してください
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="urn:ec.europa.eu:taxud:tin:services:checkTin" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns1="urn:ec.europa.eu:taxud:tin:services:checkTin:types" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:ec.europa.eu:taxud:tin:services:checkTin">
<wsdl:types>
<xsd:schema xmlns="urn:ec.europa.eu:taxud:tin:services:checkTin:types" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="urn:ec.europa.eu:taxud:tin:services:checkTin:types">
<xsd:element name="checkTin">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="FR" type="xsd:string" />
<xsd:element name="98-0242041" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="checkTinResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="countryCode" type="xsd:string" />
<xsd:element name="tinNumber" type="xsd:string" />
"
<xsd:element name="requestDate" type="xsd:date" />
<xsd:element name="validStructure" type="xsd:boolean" />
<xsd:element name="validSyntax" type="xsd:boolean" minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
.... multiple elements of <xsd:element name="checkTin"> and <xsd:element > name="checkTinResponse"> then follow
.....
</xsd:schema>
</wsdl:types>
<wsdl:message name="checkTinRequest">
<wsdl:part name="parameters" element="tns1:checkTin" />
</wsdl:message>
<wsdl:message name="checkTinResponse">
<wsdl:part name="parameters" element="tns1:checkTinResponse" />
</wsdl:message>
<wsdl:portType name="checkTinPortType">
<wsdl:operation name="checkTin">
<wsdl:input name="checkTinRequest" message="impl:checkTinRequest" />
<wsdl:output name="checkTinResponse" message="impl:checkTinResponse" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="checkTinBinding" type="impl:checkTinPortType">
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="checkTin">
<wsdlsoap:operation soapAction="" />
<wsdl:input name="checkTinRequest">
<wsdlsoap:body use="literal" />
</wsdl:input>
<wsdl:output name="checkTinResponse">
<wsdlsoap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="checkTinService">
<wsdl:port name="checkTinPort" binding="impl:checkTinBinding">
<wsdlsoap:address location="https://ec.europa.eu/taxation_customs/tin/services/checkTinService" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
は私がしたい、私が発見し、基本的に以下のコード
Public Sub LoadDocument()
Dim XDoc As MSXML2.DOMDocument
Set XDoc = New MSXML2.DOMDocument
XDoc.validateOnParse = False
' The file here is basically the same as the XML code above
If XDoc.Load("E:\Excel\TIN\KVKF440I.txt") Then
' The document loaded successfully.
' Now do something intersting.
DisplayNode XDoc.ChildNodes, 0
Else
' The document failed to load.
' See the previous listing for error information.
' The document failed to load.
Dim strErrText As String
Dim xPE As MSXML2.IXMLDOMParseError
' Obtain the ParseError object
Set xPE = XDoc.parseError
With xPE
strErrText = "Your XML Document failed to load" & _
"due the following error." & vbCrLf & _
"Error #: " & .ErrorCode & ": " & xPE.reason & _
"Line #: " & .Line & vbCrLf & _
"Line Position: " & .linepos & vbCrLf & _
"Position In File: " & .filepos & vbCrLf & _
"Source Text: " & .srcText & vbCrLf & _
"Document URL: " & .URL
End With
MsgBox strErrText, vbExclamation
End If
Set XDoc = Nothing
End Sub
Public Sub DisplayNode(ByRef Nodes As MSXML2.IXMLDOMNodeList, ByVal Indent As Integer)
Dim xNode As MSXML2.IXMLDOMNode
Indent = Indent + 2
For Each xNode In Nodes
' If xNode.NodeType = NODE_TEXT Then
If xNode.ParentNode.nodeName = "xsd:element" Then
Debug.Print Space$(Indent) & xNode.ParentNode.nodeName & _
":" & xNode.NodeValue
End If
If xNode.HasChildNodes Then
DisplayNode xNode.ChildNodes, Indent
End If
Next xNode
End Sub
をテストしています各要素名= "checkTin" ' のループ(?)を抽出し、子要素名=' (すなわち、上記の例ではFRと98-0242021を抽出したい)の値を抽出します。 次に、同じことを対応する 'element name = "checkTinResponse"'について同じことを行い、 という5つの要素を抽出したいと考えています。これはxsd:element name = 'です。
私が言ったように、私は多くの例を見つけましたが、明らかに私が何をしているのか分かりません。 たとえば、xNode.ParentNode.nodeName = "xsd:element"のテストの上にあるコピーされたコードは実際には最良の方法ではないと思います。
感謝します。 **私はその解決策にそれを作った**方法はありません。私は今夜後で家でテストします。 –
私はこのコードを 'Dim XDoc As MSXML2.DOMDocument'と' Set XDoc = New MSXML2.DOMDocument'に変更しなければなりませんでしたが、 'Set pElements = XDoc.SelectNodes(" // * [local-name() = 'schema']/* [local-name()= 'element'] ")' "Unknown method"というエラーメッセージが表示されます –
解決策が見つかりました[link] http://stackoverflow.com/questions/20617236/unknown-method-in-xpath-run-by-vbscript私はSetPropertyについての行を追加して、うまくいきました。あなたの元の答えの多くのおかげです。 –