この問題については、使用しているxmlファイルからサンプルスタンザを貼り付けてから、それを使用して何をしようとしているのかを説明します。
次のようなスタンザを含む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
、の最初の子の2番目の要素の属性に基づいてスタンザを見つけようとしていますmb
node
。したがって、上記のスタンザでは、とに一致させようとしmodel="460"
ていvalue="H61M-P25 (MS-7680)"
ます。rev="dba"
それと一致したので、リストに入れて、他の同じ属性を持つ他のスタンザを検索し続けたいと思いますmb
nodes
。
私はまったく遠くまで来ていません、私はタイプにつまずき続けます。私はこれを使って仕事をしています。
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
一致するノードからすべての属性をキャプチャしようとしています。
したがって、上記を試してみると、リストが空になるか、文字がジャンクになるか、タイプエラーが発生します。どんな助けでもいただければ幸いです。