我如何真正读取有意义的人类形式的 XML 文件?

我如何真正读取有意义的人类形式的 XML 文件?

我下载了一个目录,它是 XML 格式的。如何将其从代码更改为人类可读的形式,并最好将其保存为纯文本文件?我以前从未工作过/见过这些;我尝试弄乱 xslproc,因为这里推荐它用于类似的事情,但无法让它工作。我成功地将它加载到 textWrangler 中,它在 XML 中正确格式化它(缩进/颜色/等),但我不知道如何实际“运行”它来打印其内容。我还尝试过 Excel、Word、记事本,但最终都出现错误。

如果还不清楚,我有这样的东西:

      <TD>51.9029244701</TD>
      <TD>47.0082067303</TD>

我想要这样的:

51.9029244701
47.0082067303

我想用这个目录的信息创建一个文本文件。

答案1

这里迟到的答案:Ubuntu 存储库有一个非常好的实用程序,xmlto可以帮助您。它将 xml 转换为多种格式,包括纯文本、epub、pdf。

网上有奥克斯车库其中有很多转换选项。

答案2

我编写了一个非常简单的 Python 脚本,它将读取 xml 文件,并将其内容输出到另一个文件中:

import sys
inFile = open(sys.argv[1], 'r')
outFile = open(sys.argv[2], 'w')    
read = True
for i in inFile.read():
    if i == '<':
        read = not read
    if read:
        outFile.write(i)
    if i == '>':
        read = not read

将其保存为 readxml.py,然后从 shell 中调用它,如下所示$ python readxml.py input.xml output.txt:它确实很初级,所以它可能不是您正在寻找的东西,但它是东西!

答案3

尝试这个:

grep "<TD>" yourfile.xml | awk -F "TD" '{gsub(">|</","",$0); print $2;}'

输出将是:

51.9029244701
47.0082067303

grep选择 XMLTD标记、awk使用TD作为分隔符并从字段中删除>和。</$2

为了选择所有节点,请尝试 xslt 转换:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="text" indent="yes"/>
   <xsl:template match="node()">
      <xsl:value-of select="." />
   </xsl:template>
</xsl:stylesheet>

这将输出 xml 文件中所有节点的内容。

答案4

实际上这比您想象的要容易 - XML 元素有 4 个“东西” - 名称、属性、子元素和“内容”。

因此,您可以迭代所有内容元素并仅打印它们(带或不带换行符)

#!/usr/env/perl

use strict;
use warnings;

use XML::Twig;

my $twig = XML::Twig -> parsefile ( 'your_file');
print $_ -> text."\n" for grep { $_ -> is_pcdata } $twig -> get_xpath('//*');

这会找出所有“内容”( pcdata) 节点,并打印它们 - 每行一个。

但实际上,当谈到 XML 时,“人类可读”才是重点。为什么不只是漂亮地打印它并保留它,这样阅读它的人就可以......好吧,阅读它,并且不会在此过程中丢失数据。

如果您愿意,可以重新格式化它:

$twig -> set_pretty_print ('indented_a'); 
$twig -> print;

这是“人类可读”的一个很好的近似。

相关内容