gpt4 book ai didi

xml - 使用Erlang xmerl_xpath提取xml文本时出现问题

转载 作者:行者123 更新时间:2023-12-03 17:20:17 26 4
gpt4 key购买 nike

我正在尝试使用Erlang的xmerl_xpath从xml节点提取文本:

[include "xmerl.hrl"]

{Doc, _}=xmerl_scan:string("<node>Hello World</node>").

[#xmlText{value=Text}]=xmerl_xpath:string("//node/text()", Doc).

Text.

"Hello World"


对于这个简单的示例,效果很好。当节点元素中的文本很大(例如1MB)时,就会发生问题。 xmerl_scan:string可以正常工作(即文档可以解析),但是尝试提取文本会产生以下错误:

{{badmatch,[{xmlText,[{node,1}],1,[],"[large text here]"}]}}


我想也许

a)当文本大小很大时,xmerl_scan:string会产生不同的文档结构

b)我已达到Erlang字符串长度的某种限制

任何想法可能会发生什么?

谢谢

最佳答案

我只是遇到了相同的错误消息,我认为问题是由于xmerl_xpath:string()返回的不正确匹配引起的,例如它返回docEntity()事物的列表,在这种情况下,它们都是#xmlText{}记录。我通过从#xmlText{}记录中提取所有字符串值,然后使用lists:concat串联列表来修复它。

所以这:

[#xmlText{value=Text}]=xmerl_xpath:string("//node/text()", Doc)


仅与一个 #xmlText完全匹配,而使用长字符串则可能会获得多个 #xmlText记录。这可能是因为XML解析器将长字符串解析为多个文本节点。

我认为这样做会更好:

Text = lists:concat(map(fun(XmlText) -> #xmlText{value=TextValue} = XmlText, TextValue end, xmerl_xpath:string("//node/text()", Doc)))

关于xml - 使用Erlang xmerl_xpath提取xml文本时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1420646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com