我该如何浏览&列出XML消息的XPATH?

时间:2015-03-20 18:10:57

标签: xml grep xmlspy large-data

我如何浏览&列出XML消息的XPATH?

感谢您查看此问题。我不确定,这是否是发布此帖子的正确论坛。如果没有,请告诉我发布此主题的正确论坛。

我们有一个复杂的XML消息(XML格式的数据)。我们正在探索一种方法来提取此XML消息的所有XPATH及其元素/属性级数据内容。我们尝试使用XMLSPY,& xmltwig,但没有运气。如果我们提供XPATH输入,Xml_grep会提取数据。 xml_grep中没有选项可以浏览XML消息的所有XPATHS。

我有完整的XML消息。我想生成一个列表/报告

1)XML消息的所有Xpath (浏览所有XPATH和XML消息列表)

2)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>

所需的输出 - &gt;我手动创建了以下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,数据内容?

感谢您允许选择此论坛的大脑。

1 个答案:

答案 0 :(得分:0)

仅此而已,我写了一些在python中完成此操作的东西-输出到csv,以管道分隔。随意使用它。很高兴回答任何问题,但不要期望立即得到答复。

from lxml import etree, objectify

def parseXML(xmlFile, outputFile):
    """
    Parse the XML function
    """
    with open(xmlFile) as fobj:
        xml = fobj.read()

    f = open(outputFile,'w') #open write to file
    root = etree.fromstring(xml)

    f.write("%s|%s\n" %("Field", "Value"))
    tree = etree.ElementTree(root)
    for e in root.iter():
        f.write("%s|%s\n" %(tree.getpath(e), e.text))

    f.close()

if __name__ == "__main__":
    print ('Loading variables...')
    input = '16a.xml'
    output = input + '.csv'

    parseXML(input,output)