programing

Groovy XmlSlurper 대 XmlParser

powerit 2023. 9. 20. 20:46
반응형

Groovy XmlSlurper 대 XmlParser

저는 이 주제에 대해 잠시 검색을 해보았는데, 글 말미에 언급하는 몇 가지 결과도 있습니다.아래에 나열된 사례에 대해 이 세 가지 질문에 정확하게 답변하는 것을 도와줄 수 있는 사람이 있습니까?

  1. XmlSuper를 사용하는 것이 XmlParser와 그 반대의 경우(API/Syntax의 사용 편의성 관점에서)보다 더 합리적인 사용 사례는 무엇입니까?

  2. 메모리 효율이 더 높은 것은 무엇입니까?(슬러퍼처럼 보임)

  3. 어떤것이 xml을 더 빨리 처리합니까?

경우 a. xml의 거의 모든 노드를 읽어야 하는 경우?

case b. 노드를 몇 개만 읽어야 할 때(gpath 표현을 사용하는 것처럼)?

케이스 c. xml을 업데이트/변환해야 할 때?

xml 문서가 사소한 문서가 아닌 경우(xml의 깊이와 크기 수준).

리소스:

http://www.tutkiun.com/2009/10/xmlparser-and-xmlslurper.html 주:

XMLParser와 XMLSlurper의 차이점:

단순한 읽기를 위해 사용할 때 XMLParser와 XMLLurper는 유사한 점이 있지만 고급 읽기를 위해 사용할 때와 다른 형식으로 XML 문서를 처리할 때는 둘 사이에 차이가 있습니다.

XML 파서는 문서를 파싱한 후 중간 결과를 저장합니다.하지만 다른 한편으로는

XML 문서를 처리한 후 내부 결과는 저장하지 않습니다.

파싱된 정보를 처리할 때 실질적이고 근본적인 차이가 분명해집니다.그것은 스트리밍 시나리오에서 직접적인 인플레이스 데이터 조작 및 처리를 할 때입니다.

http://groovy.dzone.com/news/john-wilson-groovy-and-xml

그루비 문서(XmlParser, XmlSlurper)와 그루비 사이트는 (여기여기) 그것들을 잘 설명하지만 앞서 언급한 질문을 잘 설명하지는 못합니다.

XmlSlurper와 XmlParser의 큰 차이점은 Parser가 DOM과 유사한 것을 만드는 반면, Slurper는 정말 필요한 경우에만 구조를 만들고 따라서 느리게 평가되는 경로를 사용한다는 것입니다.사용자의 경우 둘 다 매우 동등해 보일 수 있습니다.파서 구조는 한 번만 평가되고 슬러퍼 경로는 요구에 따라 평가될 수 있다는 점에서 차이가 더 큽니다.여기서 온 디맨드는 "메모리 효율은 더 높지만 속도는 더 느리다"고 읽을 수 있습니다.궁극적으로 얼마나 많은 경로/요청을 수행하느냐에 달려 있습니다.예를 들어 XML의 특정 부분에 있는 속성의 값만 알고 싶어도 XmlParser는 여전히 모든 것을 처리하고 준 DOM에서 쿼리를 실행합니다.많은 개체가 생성된다는 점에서 메모리와 CPU가 소비됩니다.XmlSlurper는 개체를 생성하지 않으므로 메모리와 CPU를 절약할 수 있습니다.어쨌든 문서의 모든 부분이 필요한 경우에는 파서만큼의 개체를 만들 수 있기 때문에 슬러퍼는 이점을 잃게 됩니다.

둘 다 문서에 대해 변환을 수행할 수 있지만 슬러퍼는 이를 상수로 가정하므로 먼저 변경 사항을 작성하고 새 xml을 읽으려면 새 슬러퍼를 만들어야 합니다.파서는 변경 사항을 바로 확인할 수 있도록 지원합니다.

따라서 사용 사례인 질문 (1)에 대한 답은 XML 전체를 처리해야 하는 경우 파서를 사용하고, 부분적으로만 처리해야 하는 경우에는 slurper를 사용하는 것입니다.API와 구문은 이 부분에서 큰 역할을 하지 못합니다.그루비족은 이 둘을 사용자 경험에서 매우 유사하게 만들려고 노력합니다.또한 XML을 점진적으로 변경하려면 슬래퍼보다 파서를 선호합니다.

위의 서론은 또한 무엇이 메모리 효율적인지를 설명합니다. 질문 (2).어쨌든 다 읽지 않는 한 파서는 파서가 될 수 있지만, 그 차이가 얼마나 큰지에 대해서는 제가 정확한 숫자를 갖고 있지 않습니다.

또한 질문 (3)에 대해서는 인트로로 답변을 드릴 수 있습니다.여러 개의 게으른 평가 경로가 있는 경우 다시 평가해야 합니다. 파서에서와 같이 기존 그래프만 탐색하는 경우보다 이 작업이 느려질 수 있습니다.따라서 사용 용도에 따라 파서가 더 빨라질 수 있습니다.

그래서 저는 (3a) 거의 모든 노드 자체를 읽는 것은 큰 차이가 없다고 말하고 싶습니다. 그 이후로 요청이 더 결정적인 요소이기 때문입니다.그러나 (3b)의 경우에는 몇 개의 노드를 읽기만 하면 슬러퍼가 더 빠르다고 할 수 있습니다. 왜냐하면 슬러퍼는 메모리에 완전한 구조를 만들 필요가 없기 때문입니다. 그 자체로 이미 시간과 메모리가 필요하기 때문입니다.

(3c)에 관해서는..요즘은 둘 다 XML을 업데이트/변환할 수 있습니다. 어느 쪽이 더 빠를지는 실제로 XML의 몇 부분을 변경해야 하는지와 더 연결됩니다.많은 부분을 파서라고 하고, 그렇지 않다면, 아마 슬러퍼라고 할 것입니다.그러나 예를 들어 속성 값을 slurper로 "Fred"에서 "John"으로 변경하려면 나중에 같은 slurper를 사용하여 이 "John"을 쿼리해야 합니다.

간결한 답변을 드리겠습니다.

  • XML 파서는 XML 슬러퍼보다 빠릅니다.
  • XML 슬러퍼는 XML 파서보다 메모리 소모량이 적습니다.
  • XML 파서는 XML을 동시에 구문 분석하고 업데이트할 수 있습니다.
  • XML 슬러퍼의 경우에는 업데이트할 때마다 MarkupBuild XML을 작성해야 합니다.
  • 경로 식을 사용하려면 파서보다는 XML 슬러퍼가 더 좋습니다.
  • 거의 모든 노드를 읽기 위해서 XML 파서가 좋습니다.

도움이 되길 바랍니다.

언급URL : https://stackoverflow.com/questions/7558019/groovy-xmlslurper-vs-xmlparser

반응형