2017-08-09 27 views
1

私はxmlファイル内の2つの文字列の間でデータを抽出して苦労してきました。 2つのタグの間でデータを抽出する必要があります。抽出文字列ができれ

二つのタグは以下のとおりです。

<ns3:UTF8String id="ChassisNo"> 

</ns3:UTF8String> 

私は、私は2つのタグの間の文字列を抽出することを見出したコードを試してみましたが、タグは通常、以下のような、単純です。 また、間にデータを抽出するタグには二重引用符が含まれています。

<tag> </tag> 

私は次のコードを使用しようとしましたが、私の例では機能しません。

@ECHO Off 
SETLOCAL 
SET "sourcedir=C:\Users\a067935\Desktop\Wheel alignment" 
SET "filename1=%sourcedir%\test.xml" 
FOR /f "delims=" %%a IN ('FINDSTR /i /L /c:"<ns3:UTF8String id="ChassisNo">" "%filename1%"') DO SET "name=%%a" 
SET "name=%name:*<ns3:UTF8String id="ChassisNo">=%" 
FOR /f "delims=<" %%a IN ("%name%") DO set "name=%%a" 
ECHO "%name%" 
GOTO :EOF 

例xmlファイル

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<ns2:WriteRequest xmlns="ng:eie:common:header" xmlns:ns2="ng:eie:datapoint:writerequest" xmlns:ns3="ng:eie:common:datatypes" dataPointID="Request"> 
    <ns2:Header> 
     <Timestamp>2017-07-05 14:27:18.979</Timestamp> 
     <UniqueID>f558c39c-cb19-439a-97fb-2c2dfd4a0f2e</UniqueID> 
    </ns2:Header> 
    <ns2:Data> 
     <ns3:Struct id="Request"> 
      <ns3:Integer id="Version">1</ns3:Integer> 
      <ns3:UTF8String id="Operator">a262236</ns3:UTF8String> 
      <ns3:Array id="Identifiers"> 
       <ns3:Struct id="Identifier0"> 
        <ns3:Struct id="UnitIdType"> 
         <ns3:UTF8String id="Type">KD</ns3:UTF8String> 
         <ns3:UTF8String id="Id">01KD000001</ns3:UTF8String> 
        </ns3:Struct> 
        <ns3:Struct id="DeliveryOrderType"> 
         <ns3:UTF8String id="ProductType">KD</ns3:UTF8String> 
         <ns3:UTF8String id="DeliveryOrderId">0000160751</ns3:UTF8String> 
        </ns3:Struct> 
        <ns3:Struct id="ExecutionOrderType"> 
         <ns3:UTF8String id="Id">0000160751_KD</ns3:UTF8String> 
        </ns3:Struct> 
        <ns3:Struct id="InstructionType"> 
         <ns3:UTF8String id="Id">0000160751_KD</ns3:UTF8String> 
        </ns3:Struct> 
        <ns3:Struct id="TraceabilityType"> 
         <ns3:UTF8String id="Id">KD-01KD000001</ns3:UTF8String> 
        </ns3:Struct> 
        <ns3:Struct id="ChassisIdType"> 
         <ns3:UTF8String id="ChassisType">M</ns3:UTF8String> 
         <ns3:UTF8String id="ChassisNo">943524</ns3:UTF8String> 
        </ns3:Struct> 
        <ns3:Struct id="VINType"> 
         <ns3:UTF8String id="Id">YVgfhffj66943524</ns3:UTF8String> 
        </ns3:Struct> 
       </ns3:Struct> 
      </ns3:Array> 
      <ns3:Array id="Operations"> 
       <ns3:Struct id="Operation000"> 
        <ns3:Integer id="Sequence">0</ns3:Integer> 
        <ns3:Integer id="OperationCode">1</ns3:Integer> 
        <ns3:UTF8String id="OperationProgram">1</ns3:UTF8String> 
        <ns3:Integer id="BatchSize">1</ns3:Integer> 
        <ns3:Array id="Parameters"> 
         <ns3:Struct id="1"> 
          <ns3:UTF8String id="1">F1,D1,D2</ns3:UTF8String> 
          <ns3:UTF8String id="2">R</ns3:UTF8String> 
          <ns3:UTF8String id="18">Y</ns3:UTF8String> 
          <ns3:UTF8String id="13">590</ns3:UTF8String> 
          <ns3:UTF8String id="14">445</ns3:UTF8String> 
          <ns3:UTF8String id="17">3</ns3:UTF8String> 
          <ns3:UTF8String id="3">D1</ns3:UTF8String> 
          <ns3:UTF8String id="12">375</ns3:UTF8String> 
          <ns3:UTF8String id="11">-1295</ns3:UTF8String> 
          <ns3:UTF8String id="21">1190</ns3:UTF8String> 
          <ns3:UTF8String id="103">0,2</ns3:UTF8String> 
          <ns3:UTF8String id="101">0</ns3:UTF8String> 
          <ns3:UTF8String id="105">1</ns3:UTF8String> 
          <ns3:UTF8String id="23">1,5</ns3:UTF8String> 
          <ns3:UTF8String id="102">0</ns3:UTF8String> 
          <ns3:UTF8String id="107">0,5</ns3:UTF8String> 
          <ns3:UTF8String id="22">1</ns3:UTF8String> 
          <ns3:UTF8String id="104">2,2</ns3:UTF8String> 
          <ns3:UTF8String id="20">850</ns3:UTF8String> 
          <ns3:UTF8String id="113">22,5</ns3:UTF8String> 
          <ns3:UTF8String id="401">3600</ns3:UTF8String> 
          <ns3:UTF8String id="112">385-65</ns3:UTF8String> 
          <ns3:UTF8String id="402">0</ns3:UTF8String> 
          <ns3:UTF8String id="412">315-80</ns3:UTF8String> 
          <ns3:UTF8String id="115">Y</ns3:UTF8String> 
          <ns3:UTF8String id="413">22,5</ns3:UTF8String> 
          <ns3:UTF8String id="114">Set</ns3:UTF8String> 
          <ns3:UTF8String id="403">0,2</ns3:UTF8String> 
          <ns3:UTF8String id="514">Measured</ns3:UTF8String> 
          <ns3:UTF8String id="501">1370</ns3:UTF8String> 
          <ns3:UTF8String id="503">0,2</ns3:UTF8String> 
          <ns3:UTF8String id="512">315-80</ns3:UTF8String> 
          <ns3:UTF8String id="415">Y</ns3:UTF8String> 
          <ns3:UTF8String id="513">22,5</ns3:UTF8String> 
          <ns3:UTF8String id="506">0</ns3:UTF8String> 
          <ns3:UTF8String id="414">Measured</ns3:UTF8String> 
          <ns3:UTF8String id="502">0</ns3:UTF8String> 
          <ns3:UTF8String id="507">2</ns3:UTF8String> 
          <ns3:UTF8String id="515">Y</ns3:UTF8String> 
         </ns3:Struct> 
        </ns3:Array> 
       </ns3:Struct> 
      </ns3:Array> 
     </ns3:Struct> 
    </ns2:Data> 
</ns2:WriteRequest> 
+1

あなたはPowerShellの、VBScriptとJScriptのようなスクリプト言語のすべてのXMLファイルを読み書きするネイティブの機能を持っていることを認識してなされるべきです。はい、バッチファイルを使用して強制することもできますが、複雑さが増すにつれて、XMLを読み書きする機能を持つ言語を使用する方が簡単です。 – Squashman

答えて

1
@ECHO OFF 
SETLOCAL 
SET "sourcedir=U:\sourcedir" 
SET "filename1=%sourcedir%\q45583503.txt" 

FOR /f "tokens=1-7delims=<=>" %%a IN (
'findstr /R "ns3:UTF8String.id=.ChassisNo." "%filename1%" ' 
) DO ECHO chassisno=%%d 
) 

GOTO :EOF 

あなたの状況に合わせてsourcedirの設定を変更する必要があります。

テスト用にデータが入っているファイルq45583503.txtを使用しました。

の容量がfor/ffindstrの制限付き正規表現ファシリティを使用します。

+0

ありがとうございます! これは私にとって完璧に機能しました。 – zyntrax