如何浏览和列出 XML 消息的 XPATH?
****见下面的编辑部分:
感谢您调查此问题。我不确定,这是否是发布此主题的正确论坛。如果没有,请告诉我发布此主题的正确论坛。
我们有一个复杂的 XML 消息(XML 格式的数据)。我们正在探索一种方法来提取此 XML 消息的所有 XPATH 及其元素/属性级别的数据内容。我们尝试使用 XMLSPY 和 xmltwig,但没有运气。如果我们提供 XPATH 输入,Xml_grep 会提取数据。xml_grep 中没有选项可以浏览 XML 消息的所有 XPATH。
我有格式正确的 XML 消息。我想生成一个列表/报告为
XML 消息的所有 Xpath (浏览所有 XPATH 和 XML 消息列表)
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 消息生成此类报告?
提取 XPATHs/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
编辑 ===== 6/26/2019 =========================
我无法提出新问题。我收到超出问题限制的消息。我在此处发布此代码的后续内容。
我正在尝试使用发布的 pyhton 代码答案。我得到奇怪的输出。
我有一个大的 XML 文件,例如 (inputf.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 获取节点的 XPATH 时,我得到了。
xml_grep DataFileFor/DataR/Ret/W2 inputf.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"> 未显示在输出中
需要对代码进行哪些更改才能解决此问题?
感谢您的指导。