클로저 XML 구문 분석
xml 문서를 파싱하는 방법과 접근 요소에 대한 정보를 찾을 수 없습니다.
xml 문서를 파싱하는 두가지 방법을 찾았습니다.
(clojure.zip/xml-zip (clojure.xml/parse file))
그리고.
(parse-seq file)
결과 구조물을 처리하는 방법에 대한 정보를 찾을 수 있을까요?
소스 파일은 결과를 쿼리하는 방법에 대해 zip-query.clj를 언급하지만 그것도 누락된 것 같습니다.
파일에 구문 분석할 다음 xml이 있다고 가정합니다.
<high-node>
<low-node>my text</low-node>
</high-node>
당신이 싣습니다clojure.xml
:
user=> (use 'clojure.xml)
구문 분석할 때 xml은 다음과 같은 구조를 갖습니다.
{:tag :high-node, :attrs nil, :content [{:tag :low-node, :attrs nil, :content ["my text"]}]}
파일의 내용을 조회하여 파일의 내용을 얻을 수 있습니다.low-node
:
user=> (for [x (xml-seq
(parse (java.io.File. file)))
:when (= :low-node (:tag x))]
(first (:content x)))
("my text")
마찬가지로, 로우 노드에 대한 전체 정보 목록에 액세스하고 싶다면,:when
의 술어인.(= (:high-node (:tag x)))
:
user=> (for [x (xml-seq
(parse (java.io.File. file)))
:when (= :high-node (:tag x))]
(first (:content x)))
({:tag :low-node, :attrs nil, :content ["my text"]})
이것은 키워드가 함수로 작동할 수 있기 때문에 작동합니다.Clojure 및 Data Structures의 목록 및 기타 항목에 대한 질문을 참조하십시오. 키워드
위의 답변은 효과가 있지만, 사용하기가 훨씬 쉽다고 생각합니다.clojure.data.zip.xml
(예전에는clojure-contrib.zip-filter.xml
Clojure 1.3) 이전.
파일:
myfile.xml
:
<songs>
<track id="t1"><name>Track one</name></track>
<track id="t2"><name>Track two</name></track>
</songs>
코드:
; Clojure 1.3
(ns example
(:use [clojure.data.zip.xml :only (attr text xml->)]) ; dep: see below
(:require [clojure.xml :as xml]
[clojure.zip :as zip]))
(def xml (xml/parse "myfile.xml"))
(def zipped (zip/xml-zip xml))
(xml-> zipped :track :name text) ; ("Track one" "Track two")
(xml-> zipped :track (attr :id)) ; ("t1" "t2")
안타깝게도 이 좋은 읽기/필터 기능을 얻으려면 data.zip에 대한 종속성을 적용해야 합니다.의존할 가치가 있습니다 :) Inline은 (2013년 8월 17일 기준):
[org.clojure/data.zip "0.1.1"]
그리고 문서에 관해서는data.zip.xml
... 저는 무엇이 가능한지 여기서 비교적 작은 소스 파일만 보고 있습니다.여기에 또 다른 좋은 SO 답변도 있습니다.
언급URL : https://stackoverflow.com/questions/1194044/clojure-xml-parsing
'code' 카테고리의 다른 글
사용자 지정 속성에 대한 클라이언트 측 유효성 검사 수행 (0) | 2023.10.30 |
---|---|
Node.js에서 cURL에 해당합니까? (0) | 2023.10.30 |
각도 4에서 Excel로 내보내기 (0) | 2023.10.25 |
MySQL 업데이트/직렬 데이터 손상 없이 교체 (0) | 2023.10.25 |
WebGL/Canvas에 대한 AngularJS (0) | 2023.10.25 |