3
對於這個問題,我將從我正在使用的xml文件中粘貼一個示例節,然後討論我正在嘗試使用它。Text.XML.Cursor - 丟失的類型
我有節看起來像這樣的XML文件:
<mb model="460" rev="dba">
<dmiblock block="Base Board Information">
<dmiattr name="Manufacturer" value="MSI"/>
<dmiattr name="Product Name" value="H61M-P25 (MS-7680)"/>
</dmiblock>
<dmiblock block="Memory Device">
<dmiattr name="Bank Locator" value="A1_BANK0"/>
<dmiattr name="Size" value="4096 MB"/>
</dmiblock>
<dmiblock block="Memory Device">
<dmiattr name="Bank Locator" value="A1_BANK1"/>
<dmiattr name="Size" value="No Module Installed"/>
</dmiblock>
<dmiblock block="Memory Device">
<dmiattr name="Bank Locator" value="A1_BANK2"/>
<dmiattr name="Size" value="No Module Installed"/>
</dmiblock>
<dmiblock block="Memory Device">
<dmiattr name="Bank Locator" value="A1_BANK3"/>
<dmiattr name="Size" value="No Module Installed"/>
</dmiblock>
<cpublock number="0">
<cpuattr name="model name" value="Intel(R) Pentium(R) CPU G850 @ 2.90GHz"/>
</cpublock>
<cpublock number="1">
<cpuattr name="model name" value="Intel(R) Pentium(R) CPU G850 @ 2.90GHz"/>
</cpublock>
<pciblock block="NIC">
<pciattr string="Intel Corporation 82574L Gigabit Network Connection" number="2" />
</pciblock>
<blockblock block="model">
<blockattr value="8GB SATA SSD T 3" number="1" />
<blockattr value="WDC WD5003ABYX-0" number="1" />
</blockblock>
</mb>
我想基於屬性model
從mb
node
價值和從第二個元素在value
屬性來查找節第一個孩子的mb
node
。所以,在上面的節中,我會嘗試匹配model="460"
和value="H61M-P25 (MS-7680)"
。經過匹配,我想把rev="dba"
放入列表中,並繼續搜索其他mb
nodes
中具有相同屬性的其他章節。
我還沒有走得很遠,我不斷得到類型絆倒。我正在使用this來工作。
import Text.XML
import Text.XML.Cursor
import qualified Data.Text as T
getProfiles :: AdviseConf -> IO() -- AdviseResult
getProfiles (AdviseConf model mb) = do
doc <- Text.XML.readFile def xmlFile
let cursor = fromDocument doc
_ <- Prelude.writeFile "test.txt" $
show $
T.concat $
cursor $//
element "mb" >=>
attributeIs "model" "460" >=>
element "dmiattr" >=>
attributeIs "value" "H61M-P25 (MS-7680)"
&// content
我知道最終的功能content
是錯的,但我不知道這將是正確的。我試圖從匹配的節點捕獲所有rev
屬性。
所以,當我玩上述時,我最終會得到一個空列表,垃圾字符或類型錯誤。任何幫助,將不勝感激。