运营商预计将在XPath查询错误SwiProlog

问题描述:

我试图使用XPath谓词拉了解析的XML文件的一部分,但不断收到语法错误:运营商有望在特殊字符(如“/”和“@ “)xpath查询。当我用单引号包围查询时,它会失败。运营商预计将在XPath查询错误SwiProlog

?- load_xml_file('books.xml', DOM). 
DOM = [element(book, [genre=romance], ['\n Gone With The Wind\n']), element(book, [genre=thriller], ['\n The Shining\n'])]. 

?- load_xml_file('books.xml', DOM), xpath(DOM, //book(@genre=thriller), Book). 
ERROR: Syntax error: Operator expected 
ERROR: load_xml_file('books.xml', DOM), xpath(DOM, // 
ERROR: ** here ** 
ERROR: book(@genre=thriller), Book) . 

?- load_xml_file('books.xml', DOM), xpath(DOM, '//book(@genre=thriller)', Book). 
false. 

的books.xml的内容:

<?xml version="1.0"?> 
<book genre="romance"> 
    Gone With The Wind 
</book> 
<book genre="thriller"> 
    The Shining 
</book> 
+1

叫你请张贴的books.xml呢? – 2012-03-14 08:36:45

+0

我试过 '//书(@风格=惊悚片)', '//书'(@风格=惊悚片), '//书'( '@流派'=惊悚片)和 '//书'(” @流派=惊悚')。这些都不会返回错误或错误。 – Clark 2012-03-14 12:30:19

我想你好想声明

: - use_module(库(的XPath))。

+0

+1:这是正确的; xpath.pl在SWI-Prolog的库声明'运算(400,FX,//)',除其他的XPath运营商如'/'和'@',这样写术语'//书(...)'实际上被解释为术语'//(书(...))',这是解析所必需的。原子xpaths似乎没有被处理。 – sharky 2012-03-14 21:47:06

+0

@sharky:我经常使用xpath,并且该操作符在语法高亮中导致一些该死的小错误。 IDE中可能存在一些竞争条件... – CapelliC 2012-03-14 21:54:26