Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Erlang xmerl_xpath提取xml文本时出现问题_Xml_Xpath_Erlang - Fatal编程技术网

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

使用Erlang xmerl_xpath提取xml文本时出现问题,xml,xpath,erlang,Xml,Xpath,Erlang,我正在尝试使用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" 我想也许 a) xmerl_scan:当文本大小非常大时,字符串会

我正在尝试使用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"
我想也许

a) xmerl_scan:当文本大小非常大时,字符串会生成不同的文档结构

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

你知道会发生什么吗


谢谢

您的实际错误是什么?我真的不明白这是什么原因,但Erlang字符串会;整数列表实现每个字符占用8字节的内存。

我刚刚遇到了相同的错误消息,我认为问题是由于没有正确匹配
xmerl\u 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字符串的例子吗?你真的需要看看(a)xml和(b)你试图匹配的模式。1Mb没有那么大。(c)可选地调用xmerl_scan:string():)的返回值错误如下:{{badmatch,[{xmlText,[{node,1}],1,[],“[large text here]”}}}}如果是内存问题,加载模块本身会失败,不是吗?这是一个需要注意的相关问题,尤其是在从shell进行测试时,不允许已绑定变量文本。如果它已经绑定(与搜索返回的文本字符串不同),那么会出现相同的症状。如果输入错误,map()应该是lists:map(),如:text=lists:concat(lists:map(fun(XmlText)->#XmlText{value=TextValue}=XmlText,TextValue end,xmerl\u xpath:string(//node/text(),Doc)))
Text = lists:concat(map(fun(XmlText) -> #xmlText{value=TextValue} = XmlText, TextValue end, xmerl_xpath:string("//node/text()", Doc)))