3

この問題については、使用している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 nodevalue、の最初の子の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一致するノードからすべての属性をキャプチャしようとしています。

したがって、上記を試してみると、リストが空になるか、文字がジャンクになるか、タイプエラーが発生します。どんな助けでもいただければ幸いです。

4

1 に答える 1

4
  1. attributeあなたはその機能を探していると思います。
  2. を使用>=> element "dmiattr"すると、「現在の要素の名前はdmiattr」と言います。つまり、意味があると思います&/ element "dmiattr"。ただし、親の@rev属性が必要なため、check代わりに関数を使用する必要があります。
于 2012-11-02T02:44:47.200 に答える