XML メッセージの XPATH をブラウズして一覧表示するにはどうすればよいですか?
****以下の編集部分を参照してください。
この問題を調査していただきありがとうございます。これがこのスレッドを投稿するのに適切なフォーラムであるかどうかはわかりません。そうでない場合は、このスレッドを投稿する適切なフォーラムを教えてください。
複雑な XML メッセージ (XML 形式のデータ) があります。この XML メッセージのすべての XPATH とその要素/属性レベルのデータ コンテンツを抽出する方法を検討しています。XMLSPY と xmltwig を試しましたが、うまくいきませんでした。XPATH を入力すると、Xml_grep はデータをプルします。xml_grep には、XML メッセージのすべての XPATH をブラウズするオプションはありません。
整形式の XML メッセージがあります。リスト/レポートを作成したい
XML メッセージのすべての Xpath (XML メッセージのすべての XPATH とリストを参照)
Xpath 、この XPATH のデータ コンテンツ(すべての XPATH、データ コンテンツをブラウズし、XML メッセージの両方を一覧表示)
以下に例を示します (入力 XML メッセージ)
<?xml version="1.0"?>
<PARTS>
<TITLE>Computer Parts</TITLE>
<PART>
<ITEM>Motherboard</ITEM>
<MANUFACTURER>ASUS</MANUFACTURER>
<MODEL>P3B-F</MODEL>
<COST> 123.00</COST>
</PART>
<PART>
<ITEM>Video Card</ITEM>
<MANUFACTURER>ATI</MANUFACTURER>
<MODEL>All-in-Wonder Pro</MODEL>
<COST> 160.00</COST>
</PART>
<PART>
<ITEM>Sound Card</ITEM>
<MANUFACTURER>Creative Labs</MANUFACTURER>
<MODEL>Sound Blaster Live</MODEL>
<COST> 80.00</COST>
</PART>
<PART>
<ITEM>inch Monitor</ITEM>
<MANUFACTURER>LG Electronics</MANUFACTURER>
<MODEL> 995E</MODEL>
<COST> 290.00</COST>
</PART>
</PARTS>
目的の出力 --> 次の XML リストを手動で作成しました
/PARTS/TITLE Computer Parts
/PARTS/PART[1]/ITEM Motherboard
/PARTS/PART[1]/MANUFACTURER ASUS
/PARTS/PART[1]/MODEL P3B-F
/PARTS/PART[1]/COST 123.00
/PARTS/PART[2]/ITEM Video Card
/PARTS/PART[2]/MANUFACTURER ATI
............
..............
..................
...................
このような XML メッセージのレポートを生成するオープン ソース製品はありますか?
XPATH/XPATH、データコンテンツを抽出する方法は何ですか?
このフォーラムの頭脳を選ぶことを許可してくれてありがとう。
+++++
ありがとう。上記のコード出力
Field|Value
/*|
/*/*[1]|X
/*/*[2]|000000000
/*/*[3]|000000000
/*/*[4]|&
/*/*[5]|
テキスト xpath を取得できません
ここに入力xmlがあります
<CorrectedW2Ind>X</CorrectedW2Ind>
<EmployeeSSN>000000000</EmployeeSSN>
<EmployerEIN>000000000</EmployerEIN>
<EmployerNameControlTxt>&</EmployerNameControlTxt>
<EmployerName>
<BusinessNameLine1Txt>#</BusinessNameLine1Txt>
<BusinessNameLine2Txt>#</BusinessNameLine2Txt>
</EmployerName>
<EmployerUSAddress>
<AddressLine1Txt>0</AddressLine1Txt>
<AddressLine2Txt>0</AddressLine2Txt>
<CityNm>A</CityNm>
<StateAbbreviationCd>PW</StateAbbreviationCd>
<ZIPCd>00000</ZIPCd>
</EmployerUSAddress>
<EmployersUseGrp>
<EmployersUseCd>A</EmployersUseCd>
<PriorUSERRAContributionYr>00</PriorUSERRAContributionYr>
<EmployersUseAmt>0</EmployersUseAmt>
</EmployersUseGrp>
<EmployersUseGrp>
<EmployersUseCd>A</EmployersUseCd>
<PriorUSERRAContributionYr>00</PriorUSERRAContributionYr>
<EmployersUseAmt>0</EmployersUseAmt>
</EmployersUseGrp>
<EmployersUseGrp>
<EmployersUseCd>A</EmployersUseCd>
<PriorUSERRAContributionYr>00</PriorUSERRAContributionYr>
<EmployersUseAmt>0</EmployersUseAmt>
</EmployersUseGrp>
<EmployersUseGrp>
<EmployersUseCd>A</EmployersUseCd>
<PriorUSERRAContributionYr>00</PriorUSERRAContributionYr>
<EmployersUseAmt>0</EmployersUseAmt>
</EmployersUseGrp>
<EmployersUseGrp>
<EmployersUseCd>A</EmployersUseCd>
<PriorUSERRAContributionYr>00</PriorUSERRAContributionYr>
<EmployersUseAmt>0</EmployersUseAmt>
</EmployersUseGrp>
a) 上記のコードを使用して値、Xpath (テキスト) を取得するために使用する lxml メソッドは何ですか?
b) グループ ノードの集約を繰り返すために使用する lxml メソッドは何ですか?
たとえば、EmployersUseGrp の Xpath ====> 5
編集===== 2019年6月26日========================
新しい質問を開くことができません。質問の制限を超えたというメッセージが表示されます。このコードのフォローアップをここに投稿しています。
投稿された pyhton コードの回答を使用しようとしています。奇妙な出力が得られます。
(inputf.xml) のような大きな XML ファイルがあります。このファイルを投稿されたコードで input = inputf.xml として使用しました
<?xml version="1.0" encoding="UTF-8"?>
<DataFileFor>
<DataR>
<Id>5070022019330a0050hq</Id>
<NUM>30221730001019</NUM>
<Postmark>2020-01-03T09:25:57.000-05:00</Postmark>
<TNO>47647</TNO>
.
.
.
.
.
</DataFileFor>
++++
xml_grep を使って Node の XPATH を取得すると、取得しています。
xml_grep DataFileFor/DataR/Ret/W2 入力f.xml ===> 出力
<?xml version="1.0" ?>
<xml_grep version="0.7" date="Fri Jun 26 13:07:11 2020">
<file filename="inputf.xml">
<W2 Id="W2" dName="W2" sId="00000000" sVersionNum="String">
<CorrectedW2Ind>X</CorrectedW2Ind>
<EmployeeSSN>000000000</EmployeeSSN>
<EmployerEIN>000000000</EmployerEIN>
<EmployerNameControlTxt>S</EmployerNameControlTxt>
<EmployerName>
<BusinessNameLine1Txt>String</BusinessNameLine1Txt>
<BusinessNameLine2Txt>String</BusinessNameLine2Txt>
</EmployerName>
<EmployerUSAddress>
<AddressLine1Txt>String</AddressLine1Txt>
<AddressLine2Txt>String</AddressLine2Txt>
<CityNm>String</CityNm>
<StateAbbreviationCd>AL</StateAbbreviationCd>
<ZIPCd>000000000</ZIPCd>
.
.
.
.
.
</W2>
このコードを使用すると、読み取り可能な Xpath が生成されません。出力XPATHSは次のようになります
/DataFileFor/DataR/*[8]/*[2]/*[6]/*[3]/*[10]|X
/DataFileFor/DataR/*[8]/*[2]/*[6]/*[3]/*[11]|00000000
/DataFileFor/DataR/*[8]/*[2]/*[6]/*[3]/*[12]|00000000
/DataFileFor/DataR/*[8]/*[2]/*[6]/*[3]/*[13]|S
/DataFileFor/DataR/*[8]/*[2]/*[6]/*[3]/*[14]|String
属性
Id="W2" dName="W2" sId="00000000" sVersionNum="String"> が出力に表示されない
これを修正するには、コードにどのような変更が必要ですか?
ご指導ありがとうございます。