【问题标题】:Can anybody help me read this XML file and tell me what I am looking at谁能帮我阅读这个 XML 文件并告诉我我在看什么
【发布时间】:2019-08-10 09:25:11
【问题描述】:

我需要能够读取每一行和每一列上的内容,例如 D3 行上的内容,但我不确定如何做到这一点。我知道它制作了一个电子表格,但这是用什么代码或语言编写的,我如何学会从这个来源读取特定信息?

我的印象是它是 xml 并且有它创建的完整表,但我仍然无法弄清楚我是如何读取每一行或每一列上的内容的。

<wf:table h="85" w="405" range="A1:D5">
<wf:fmts>
<wf:bdrFmts>
<wf:bdrFmt style="solid"/>
<wf:bdrFmt style="double"/>
</wf:bdrFmts>
<wf:fillFmts>
<wf:fillFmt color="#0094ff"/>
</wf:fillFmts>
<wf:valFmts>
<wf:valFmt fmtStr="MMMM D, &lt;new_line> YYYY" typ="dateTime"/>
<wf:valFmt typ="text"/>
<wf:valFmt outScl="6" typ="accounting" thouSep="true"/>
</wf:valFmts>
<wf:txtFmts>
<wf:txtFmt fontFamily="Arial"/>
<wf:txtFmt fontWeight="bold" textAlign="center" fontFamily="Arial"/>
<wf:txtFmt fontWeight="bold" fontFamily="Arial" color="#00cc00"/>
</wf:txtFmts>
<wf:condFmts/>
</wf:fmts>
<wf:cols>
<wf:col w="201" />
<wf:col gutter="3.35" w="100" />
<wf:col w="4" />
<wf:col gutter="3.35" w="100" />
</wf:cols>
<wf:rows>
<wf:row h="25">
<wf:c tFmt="1"/>
<wf:c formattedString="June 30, &#xA;2016" tFmt="2" val="6/30/2016" vFmt="1" bFmt="0|.     0|0|1"/>
<wf:c tFmt="1"/>
<wf:c formattedString="December 31, &#xA;2015" tFmt="2" val="12/31/2015" vFmt="1" bFmt="0|0|0|1"/>
</wf:row>
<wf:row h="15">
<wf:c formattedString="Debt Securities" tFmt="1" vFmt="2" val="Debt Securities"/>
<wf:c formattedString="1,000" tFmt="1" fFmt="1" val="1000" inScl="6" vFmt="3"/>
<wf:c tFmt="1"/>
<wf:c formattedString="1,200" tFmt="1" fFmt="1" val="1200" inScl="6" vFmt="3"/>
</wf:row>
<wf:row h="15">
<wf:c formattedString="Equities" tFmt="1" vFmt="2" val="Equities"/>
<wf:c formattedString="500" tFmt="1" val="500" inScl="6" vFmt="3"/>
<wf:c tFmt="1" />
<wf:c formattedString="600" tFmt="1" val="600" inScl="6" vFmt="3"/>
</wf:row>
<wf:row h="15">
<wf:c formattedString="Money Market Funds" tFmt="1" vFmt="2" val="Money Market    Funds"/>
<wf:c formattedString="200" tFmt="1" fFmt="1" val="200" inScl="6" vFmt="3"/>
<wf:c tFmt="1"/>
<wf:c formattedString="200" tFmt="1" fFmt="1" val="200" inScl="6" vFmt="3"/>
</wf:row>
<wf:row h="15">
<wf:c formattedString="Total Cash Equivalents" tFmt="1" vFmt="2" val="Total Cash Equivalents"/>
 C
 <wf:c tFmt="1" />
 <wf:c formattedString="2,000" tFmt="3" formula="SUM(D2:D4)" val="2000" inScl="6" vFmt="3" bFmt="0|0|1|2"/>
</wf:row>
</wf:rows>
</wf:table>
</wf:Worksheet>
</WFML>

【问题讨论】:

  • 您搜索的是开始标签名称还是附加的命名空间?
  • 网址现在重定向到不同的网站,但我们可以假设这是会计软件,从新位置判断。
  • 我还看到了与 SEC 文件的联系,所以大概这是一种标记语言,用于通过网络提交您的 SEC 文件。它将是SGML document
  • 我知道它现在属于公司的 Workeva,作为测试的一部分,我被要求告诉他们 d3 中的数字是多少,以及 6 月 30 日的总数是多少。但我不清楚我应该如何从这些数据中知道这些信息,并试图弄清楚其他人是否理解并可以解释。抱歉,如果不清楚。
  • 我还找到了对wfmc.org 的引用,但他们的标准页面没有提及这一点。它似乎是一种完全过时的格式,已从网络上消失。找到的极少数参考将其称为 XML 派生标记语言,听起来仍然很像 SGML。

标签: python xml cc


【解决方案1】:

Python 中的BeautifulSoup 模块可以轻松遍历任何类型的类似 XML 的代码。

将您的代码放入我命名为pagecode 的字符串中后,我运行它以提取第四行第三列中的内容:

from bs4 import BeautifulSoup
soup = BeautifulSoup(pagecode, 'lxml')
rows = soup.find_all("wf:row")
cell = rows[3].find_all("wf:c")[2]  # Indexing starts at 0, not 1!
print(cell)  # Displays <wf:c tfmt="1"></wf:c>

【讨论】:

  • 不,不要把它当作 HTML,它不是 HTML。仅仅因为解析器设法接受这一点,并不意味着解析结果中不会有错误。
  • 请注意,这里不是 BeautifulSoup 进行解析,而是 lxml HTML 解析器完成了实际工作。 BeautifulSoup 然后为您提供一个 API 来操作已解析的对象。
  • 谢谢,我明天会更详细地研究一下。
  • Martijn,即使“lxml”是进行实际解析的底层内容,我给出的示例仍然适用于给出的代码。你会用什么代替?
猜你喜欢
  • 2011-01-07
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-09
  • 2013-06-05
  • 2021-12-08
  • 1970-01-01
相关资源
最近更新 更多