pugixml-0.3.0: pugixml binding.

Safe HaskellNone
LanguageHaskell2010

Text.XML.Pugi

Contents

Description

import/langauge

> :set -XOverloadedStrings -XQuasiQuotes
> import Text.XML.Pugi
> import qualified Text.XML.Pugi.Mutable as M

| parse xml

> docA <- parse def "<a />"
> docA
Right Document <a />

> parseFile def "test.xml"
Document <test >

render xml

> Data.ByteString.Lazy.Char.putStrLn $ either undefined (pretty def) docA
<?xml version="1.0"?>
<a />

> prettyFile def docA

create xml

testHtml :: IO Document
testHtml = M.create $ doc -> do
    decl <- M.appendDeclaration "xml" doc
    M.appendAttrs [("version", "1.0"), ("lang", "ja")] decl

    M.appendDoctype "html" doc

    html <- M.appendElement "html" doc
    body <- M.appendElement "body" html
    div_ <- M.appendElement "div"  body
    a    <- M.appendElement "a"    div_
    M.appendAttr "href" "http://example.com" a
    txt  <- M.appendPCData "example.com" a
    return ()
-- testHtml for copy&paste to ghci.
> doc <- M.create $ \doc -> M.appendDeclaration "xml" doc >>= \decl -> M.appendAttrs [("version", "1.0"), ("lang", "ja")] decl >> M.appendDoctype "html" doc >> M.appendElement "html" doc >>= \html -> M.appendElement "body" html >>= \body -> M.appendElement "div"  body >>= \div_ -> M.appendElement "a"    div_ >>= \a -> M.appendAttr "href" "http://example.com" a >> M.appendPCData "example.com" a >> return ()

> doc
Document <?xml version="1.0" lang="ja"?><!DOCTYPE html><html><body><div><a href="http://example.com">example.com</a></div></body></html>

access xml tree

> let Just x = child "xml" doc
> x
Node <?xml version="1.0" lang="ja"?>

> nextSibling x
Just Node <!DOCTYPE html>

> Just html = nextSiblingByName "html" x

> html
Node <html><body><div><a href="http://example.com">example.com</a></div></body></html>

> evaluate [xpath|string(//a/href)|] html
"http://example.com"

> let ns = evaluate [xpath|//a/href|] html

> nodeSetSize ns
1
> nodeSetIndex ns 0
Right ("href","http://example.com")

modify xml

M.modify doc $ \d -> M.selectSingleNode [xpath|//a|] d >>= \(Left a) -> M.setOrAppendAttr "href" "#" a
Document <?xml version="1.0" lang="ja"?><!DOCTYPE html><html><body><div><a href="#">example.com</a></div></body></html>

Synopsis

Document

data MutableFlag Source

Constructors

Mutable 
Immutable 

Instances

parse

render

Node

data NodeKind Source

Constructors

Element

<name>children</name>

PCData

value

CData

<![CDATA[value]]>

Comment

<!--value-->

Pi

<?name value?>

Declaration

<?name?>

Doctype

<!DOCTYPE value>

Unknown 

asMutable :: NodeLike n => n k Mutable -> n k Mutable Source

asImmutable :: NodeLike n => n k Immutable -> n k Immutable Source

getter

class NodeLike n where Source

Methods

asNode :: n k Immutable -> Node_ k Immutable Source

nodeEqual :: n k Immutable -> n l Immutable -> Bool Source

forgetNodeKind :: n k Immutable -> n Unknown Immutable Source

prettyNode :: PrettyConfig -> Int -> n k Immutable -> ByteString Source

hashValue :: n k Immutable -> CSize Source

nodeType :: n k Immutable -> NodeType Source

getName :: HasName k => n k Immutable -> ByteString Source

getValue :: HasValue k => n k Immutable -> ByteString Source

parent :: n k Immutable -> Maybe Node Source

firstChild :: HasChildren k => n k Immutable -> Maybe Node Source

lastChild :: HasChildren k => n k Immutable -> Maybe Node Source

nextSibling :: n k Immutable -> Maybe Node Source

prevSibling :: n k Immutable -> Maybe Node Source

child :: HasChildren k => ByteString -> n k Immutable -> Maybe Node Source

attribute :: HasAttribute k => ByteString -> n k Immutable -> Maybe ByteString Source

nextSiblingByName :: ByteString -> n k Immutable -> Maybe Node Source

prevSiblingByName :: ByteString -> n k Immutable -> Maybe Node Source

findChildByNameAndAttr Source

Arguments

:: HasChildren k 
=> ByteString

node name

-> ByteString

attribute name

-> ByteString

attribute value

-> n k Immutable 
-> Maybe Node 

findChildByAttr Source

Arguments

:: HasChildren k 
=> ByteString

attribute name

-> ByteString

attribute value

-> n k Immutable 
-> Maybe Node 

childValue :: HasChildren k => n k Immutable -> ByteString Source

childValueByName :: HasChildren k => ByteString -> n k Immutable -> ByteString Source

text :: n k Immutable -> ByteString Source

findAttribute :: (ByteString -> ByteString -> Bool) -> n k Immutable -> Maybe Attribute Source

find attribute by predicate. since v0.2.0.

findChild :: (Node -> Bool) -> n k Immutable -> Maybe Node Source

find child by predicate. since v0.2.0.

findNode :: (Node -> Bool) -> n k Immutable -> Maybe Node Source

find node by predicate. since v0.2.0.

mapSibling :: (Node_ Unknown Immutable -> a) -> n k Immutable -> [a] Source

mapAttrs :: HasAttribute k => (ByteString -> ByteString -> a) -> n k Immutable -> [a] Source

path :: Char -> n k Immutable -> ByteString Source

firstElementByPath :: Char -> ByteString -> n k Immutable -> Maybe Node Source

root :: n k Immutable -> Maybe Node Source

evaluate :: EvalXPath r => XPath r -> n k Immutable -> XPathResult r Immutable Source

selectSingleNode :: XPath NodeSet -> n k Immutable -> XPathNode Immutable Source

selectNodes :: XPath NodeSet -> n k Immutable -> NodeSet Immutable Source

XPath

data XPath rt Source

class EvalXPath a Source

Minimal complete definition

evaluateXPath

Associated Types

type XPathResult a m Source

xpath :: QuasiQuoter Source

generate xpath object.

[xpath|query|] == ((xpathObject) :: XPath (instance of EvalXPath))

NodeSet

data NodeSet m Source

Instances

nodeSetMapM :: (XPathNode m -> IO a) -> NodeSet m -> IO [a] Source

nodeSetMapM_ :: (XPathNode m -> IO ()) -> NodeSet m -> IO () Source

nodeSetMap :: (XPathNode m -> a) -> NodeSet m -> [a] Source

reexport

def :: Default a => a

The default value for this type.