不确定如何使用 Text.XML.Cursor 解析它
Not sure how to parse this using Text.XML.Cursor
我正在尝试解析如下所示的 XML:
<h1>Collection A</h2>
<table>
<tr>Property 1</tr>
<tr>Property 2</tr>
</table>
<h2>Collection 2</h2>
<table>
<tr>Property 1</tr>
<tr>Property 88</tr>
</table>
我想这样解析该信息:
MyClass "Collection 1" "Property 1"
MyClass "Collection 1" "Property 2"
MyClass "Collection 2" "Property 1"
MyClass "Collection 2" "Property 88"
我不确定该怎么做。我的第一个想法是做 element "h1" $| followingSibling &// element "tr" &/ content
之类的事情,但这不起作用,因为它会捕获所有的 tr,甚至是那些不 "belong" 到 table 的我正在尝试读取,但我无法知道哪些属性属于哪个集合。
我该如何解决这个问题?
您必须将 "immediate sibling" 的 XML 轴定义为 followingSibling
returns 上下文之后的每个节点。这是可能的,因为 Text.XML.Cursor
中的 Axis
是 Cursor -> [Cursor]
的类型同义词:
immediateSibling = take 1 . (anyElement <=< followingSibling)
结合不同层次的信息就是嵌套列表理解:
selected = root $/ selector
selector = element "h2" >=> toTuple
-- replace tuple with your constructor
toTuple c = [ (coll, prop)
| coll <- c $/ content
, prop <- c $| (immediateSibling >=> element "table" &/ element "tr" &/ content) ]
我正在尝试解析如下所示的 XML:
<h1>Collection A</h2>
<table>
<tr>Property 1</tr>
<tr>Property 2</tr>
</table>
<h2>Collection 2</h2>
<table>
<tr>Property 1</tr>
<tr>Property 88</tr>
</table>
我想这样解析该信息:
MyClass "Collection 1" "Property 1"
MyClass "Collection 1" "Property 2"
MyClass "Collection 2" "Property 1"
MyClass "Collection 2" "Property 88"
我不确定该怎么做。我的第一个想法是做 element "h1" $| followingSibling &// element "tr" &/ content
之类的事情,但这不起作用,因为它会捕获所有的 tr,甚至是那些不 "belong" 到 table 的我正在尝试读取,但我无法知道哪些属性属于哪个集合。
我该如何解决这个问题?
您必须将 "immediate sibling" 的 XML 轴定义为 followingSibling
returns 上下文之后的每个节点。这是可能的,因为 Text.XML.Cursor
中的 Axis
是 Cursor -> [Cursor]
的类型同义词:
immediateSibling = take 1 . (anyElement <=< followingSibling)
结合不同层次的信息就是嵌套列表理解:
selected = root $/ selector
selector = element "h2" >=> toTuple
-- replace tuple with your constructor
toTuple c = [ (coll, prop)
| coll <- c $/ content
, prop <- c $| (immediateSibling >=> element "table" &/ element "tr" &/ content) ]