en en ko ko ko ko ko ko ko en ko el ko ko en ko ko ko ko ko ko ko ko ko nl ko en nl ko en ko nl ko en ko zh ko en nl ko en ko en ko zh nl ko zh ko nl ko en ko nl ko en ko ko ko en ko ko en ko ko ko ko ko zh en en en en en pt en it en en en sv fr en en en en en en en es fr en en en fr ja en en de en en en en en hu ja pt ru en en en en en ko ko ko ko ko ko ko en pt sv en ko ko ko ko ko ko ko ko ko ko ko en en
스크립팅 : XML 파일의 태그에서 값을 추출하는 가장 쉬운 방법은 무엇입니까?  1.0.74-SNAPSHOT
pom.xml (Maven의 ‘Project Object Model’)을 읽고 버전 정보를 추출하고 싶습니다. 예를 들면 다음과 같습니다.
4.0.0   com.mycompany   project-parent   project-parent   1.0.74-SNAPSHOT       com.sybase.jconnect   jconnect   6.05-26023       joda-time   joda-time   1.5.2       com.sun.jdmk   jmxtools   1.2.1       org.easymock   easymock   2.4
위에서 ‘1.0.74-SNAPSHOT’버전을 어떻게 추출 할 수 있습니까?
간단한 bash 스크립팅 sed 또는 awk를 사용하여 그렇게 할 수 있기를 바랍니다. 그렇지 않으면 간단한 파이썬이 선호됩니다.
리눅스 상자는 회사 환경에 있으므로 이미 설치된 도구 만 사용할 수 있습니다 (xml2와 같은 유틸리티를 요청할 수는 없지만 많은 빨간 테이프를 거쳐야합니다). 일부 솔루션은 매우 우수하지만 (몇 가지 새로운 트릭을 이미 배우십시오) 제한된 환경으로 인해 적용되지 않을 수 있습니다
원본 태그에 dependencies 태그를 추가했습니다. 이 경우 해키 솔루션이 작동하지 않을 수 있습니다.
내가 사용하는 배포판은 RHEL4입니다.
xml2는 xml을 라인 지향 형식으로 변환 할 수 있습니다.
xml2 < pom.xml | grep /project/version= | sed 's/.*=//'
다른 방법 : xmlgrep 및 XPath :
xmlgrep --text_only '/project/version' pom.xml
$ python -c 'from xml.etree.ElementTree import ElementTree; print ElementTree(file="pom.xml").findtext("{http://maven.apache.org/POM/4.0.0}version")' 1.0.74-SNAPSHOT
$ xml sel -N x="http://maven.apache.org/POM/4.0.0" -t -m 'x:project/x:version' -v . pom.xml 1.0.74-SNAPSHOT
$ echo -e 'setns x=http://maven.apache.org/POM/4.0.0\ncat /x:project/x:version/text()' | xmllint --shell pom.xml | grep -v / 1.0.74-SNAPSHOT
클로저 방식. 특수 jar 파일이있는 jvm 만 필요합니다.
java -cp clojure.jar clojure.main -e "(use 'clojure.xml) (->> (java.io.File. \"pom.xml\") (clojure.xml/parse) (:content) (filter #(= (:tag %) :version)) (first) (:content) (first) (println))"
java -Xbootclasspath/a:scala-library.jar -cp scala-compiler.jar scala.tools.nsc.MainGenericRunner -e 'import scala.xml._; println((XML.load(new java.io.FileInputStream("pom.xml")) match { case  {children @ _*}  => for (i  {children @ _*}  => true; case _ => false; })) yield i })(0) match { case  {Text(x)}  => x })'
java -classpath groovy-all.jar groovy.ui.GroovyMain -e 'println (new XmlParser().parse(new File("pom.xml")).value().findAll({ it.name().getLocalPart()=="version" }).first().value().first())'
Perl의 대안은 다음과 같습니다.
$ perl -MXML::Simple -e'print XMLin("pom.xml")->{version}."\n"' 1.0.74-SNAPSHOT
깊이가 다른 여러 “버전”요소가있는 질문에서 수정 / 확장 된 예제와 함께 작동합니다.
perl -e '$_ = join "",  ; m! ]*>.*\n(?: |\t) ]*>\s*([^ .* !s and print "$1\n"' pom.xml
필요한 정확한 들여 쓰기에 의존
매우 서투른 단일 라이너 솔루션을 개발하십시오.
python -c "from xml.dom.minidom import parse;dom = parse('pom.xml');print [n for n in dom.getElementsByTagName('version') if n.parentNode == dom.childNodes[0]][0].toxml()" | sed -e "s/.*>\(.*\)<.*/\1/g"
끝에있는 sed는 매우 못 생겼지 만 mindom만으로 노드의 텍스트를 인쇄 할 수 없었습니다.
덜 해킹 된 파이썬 버전 :
python -c "from xml.dom.minidom import parse;dom = parse('pom.xml');print [i.childNodes.item(0).nodeValue for i in dom.firstChild.childNodes if i.nodeName == 'version'].pop()"
python -c "from xml.dom.minidom import parse;dom = parse('pom.xml');print [n.firstChild.data for n in dom.childNodes[0].childNodes if n.firstChild and n.tagName == 'version']"
이 글은 슈퍼유저 카테고리에 분류되었고 bash, linux, python, unix, xml 태그가 있으며 [호호] 야야님에 의해 2022년 9월 12일에 작성되었습니다.
기본 Wi-Fi 설정 및 암호 배포 및 설정을 설정하고 처럼 그런
제로 충전은 virtualbox 동적 디스크 이미지의 크기를 증가시킵니다 있습니다.) 추가 질문 중 하나는 디스크 크기를 늘리지
Amazon ECS에서 서비스 컨테이너 업데이트 업데이트 한 경우, 해당 이미지와
가운데 클릭을위한 트리플 핑거 탭? 클릭을 위해
설치된 응용 프로그램 중 / usr / bin 또는 사용자의 홈 디렉토리 중 어떤 것이 더 낫습니까? 디렉토리 에 설치하는 것이 더
apthow.com powered by hoya