>> ? xml
No information on xml
有parse-xml,但在我看来,它适用于Rebol2。
我已经在rebol.org中搜索了xml
个脚本,发现xml-object.r在我看来就像all次搜索中最新的一样。
我也知道altxml,但给出的例子是html
。
所以,如果我想解析并使用这种简化结构的+ 1GB文件的信息,我想询问我的选择:
<?xml version="1.0" encoding="Windows-1252" standalone="yes"?>
<SalesFile xmlns="urn:StandardSalesFile-1.0">
<Header>
<SalesFileVersion>1.01</SalesFileVersion>
<DateCreation>2014-04-30</DateCreation>
</Header>
<SalesInvoices>
<Invoice>
<InvoiceNo>INV 1/1</InvoiceNo>
<DocumentStatus>
<InvoiceStatus>N</InvoiceStatus>
<InvoiceStatusDate>2014-01-03T17:57:59</InvoiceStatusDate>
</DocumentStatus>
</Invoice>
<Invoice>
<InvoiceNo>INV 2/1</InvoiceNo>
<DocumentStatus>
<InvoiceStatus>N</InvoiceStatus>
<InvoiceStatusDate>2014-01-03T17:59:12</InvoiceStatusDate>
</DocumentStatus>
</Invoice>
</SalesInvoices>
</SalesFile>
Rebol3会有parse-xml
工具吗?我应该使用xml-object
吗?如果是这样的话?因为它仍然是我新手的语言水平。其他选择?
答案 0 :(得分:2)
您真的需要将XML文件作为结构处理吗?如果没有,您是否考虑过使用PARSE?
(警告:以下是未经测试的,我只是提出了这个概念。)
Invoices: copy []
parse my-doc [
<?xml version="1.0" encoding="Windows-1252" standalone="yes"?>
thru <SalesFile xmlns="urn:StandardSalesFile-1.0">
thru <Header>
thru <SalesFileVersion> copy SalesFileVersion to </SalesFileVersion>
</SalesFileVersion>
thru <DateCreation> copy DateCreation to </DateCreation>
</DateCreation>
thru </Header>
thru <SalesInvoices>
any [
thru <Invoice>
(Invoice: object [])
thru <InvoiceNo> copy InvoiceNo to </InvoiceNo>
</InvoiceNo>
(Invoice/No: InvoiceNo)
thru <DocumentStatus>
thru <InvoiceStatus> copy InvoiceStatus to </InvoiceStatus>
</InvoiceStatus>
(Invoice/Status: InvoiceStatus)
thru <InvoiceStatusDate> copy InvoiceStatusDate to </InvoiceStatusDate>
</InvoiceStatusDate>
(Invoice/StatusDate: InvoiceStatusDate)
thru </DocumentStatus>
thru </Invoice>
]
thru </SalesInvoices>
thru </SalesFile>
to end
]
如果您知道自己拥有格式良好的XML,并且不希望依赖库来处理clunky-ol&#39;使用PARSE,XML,Rebol可以很清楚。作为标签!只是字符串的子类,你可以使事物看起来相对有文化。而且使用琴弦更轻巧。
虽然如果需要结构化操作,你需要一些能够制作DOM的东西。 Altxml现在是AFAIK的首选。
(嗯......我的模式copy x to <foo> <foo>
的名称目前让我失望,但这是一个很好的例子。)
答案 1 :(得分:2)
Christopher Ross-Gill还有一个名为alt-xml的Rebol 3库。
http://www.ross-gill.com/page/XML_and_REBOL
这可以将XML转换为block!
或object!
表示。
您的问题表明这些XML文件很大,可能不适合主内存。我建议创建1GB XML文件并不是最佳实践,因为许多解析器(包括此解析器)都会尝试将文件加载到内存中。
要支持这一点,您必须使用文件上的open
和文件中的copy/part
块自行对文件进行分块。这有点乱,但它会起作用。
使这个更干净的一种方法是根据HostileFork的建议使用解析,并在解析它时修改系列。 Parse在这方面非常灵活。
理想情况下,解析可以直接在port!
个对象上工作,但这只是目前未来的愿望清单项目。
答案 2 :(得分:1)
%Rebol-Dom.r 或 %rebol-dom-mdlparser.r, 如果您愿意使用带有解析的 rebol2 来查找节点名称,然后复制一大块数据,您可以将其提供给 Rebol-Dom.r getnodename "salesInvoice" 并重复将该节点元素附加到一个块中。< /p>