Clojure 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"]}]}
그런 다음 파일의 내용을 seq하여 다음 내용을 가져올 수 있습니다 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 및 데이터 구조 : 키워드 에서 목록 및 기타 항목 에 대한 질문 보기
위의 답변은 작동하지만 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 에 대한 종속성을 가져와야 합니다. 의존 할 가치가 있습니다. :) lein 에서는 다음과 같습니다 (2013 년 8 월 17 일 기준).
[org.clojure/data.zip "0.1.1"]
그리고에 대한 문서에 관해서는 ... 가능한 것이 무엇인지 확인하기 위해 data.zip.xml
상대적으로 작은 소스 파일을 여기 에서 살펴 봅니다. 여기에 또 다른 좋은 대답 도 있습니다.
참고URL : https://stackoverflow.com/questions/1194044/clojure-xml-parsing
'developer tip' 카테고리의 다른 글
드롭 다운 목록 제어 (0) | 2020.11.17 |
---|---|
n 개의 마지막 행에서 mysql 선택 (0) | 2020.11.17 |
Thymeleaf : Concatenation-식으로 구문 분석 할 수 없습니다. (0) | 2020.11.16 |
OPTIONS Http 메서드에 대한 Spring 보안 비활성화 (0) | 2020.11.16 |
Python을 사용하여 웹 페이지를 PDF로 변환하는 방법 (0) | 2020.11.16 |