XMLStarlet는 ( http://xmlstar.sourceforge.net/overview.php ) C 및 용도에 기록 libxml2
하고 libxslt
.
주어진 XML 문서
<?xml version="1.0"?>
<root>
<tag>data</tag>
</root>
를 root
사용하여 삽입 될 수 있는 서브 노드
xml ed -s '/root' -t elem -n 'newtag' -v 'newdata' file.xml
어떤 생산
<?xml version="1.0"?>
<root>
<tag>data</tag>
<newtag>newdata</newtag>
</root>
많은 것을 삽입 ( file.xml
여기 상단 의 원본 사용 ) :
xml ed -s '/root' -t elem -n 'newtag' \
-s '/root/newtag' -t elem -n 'subtag' -v 'subdata' file.xml
이것은 생산
<?xml version="1.0"?>
<root>
<tag>data</tag>
<newtag>
<subtag>subdata</subtag>
</newtag>
</root>
질문의 예 :
xml ed -N x="http://maven.apache.org/POM/4.0.0" \
-s '/x:project' -t elem -n 'distributionManagement' \
-s '/x:project/distributionManagement' -t elem -n 'repository' \
-s '/x:project/distributionManagement/repository' -t elem -n 'id' \
-v 'private-releases' \
-s '/x:project/distributionManagement/repository' -t elem -n 'url' \
-v 'https://my.private.server.com/nexus/repository/maven-releases/' \
file.xml
결과:
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- a lot of other tags-->
<distributionManagement>
<repository>
<id>private-releases</id>
<url>https://my.private.server.com/nexus/repository/maven-releases/</url>
</repository>
</distributionManagement>
</project>
이전에 준비된 XML 파일을 XML의 위치에 삽입
질문에서 원본 XML을 가정에 file.xml
새로운에 가야 추가 비트 distributinManagement
노드에있는 new.xml
(그러나 하지 노드 태그 자체), 하나는 다음을 수행 할 수 삽입 할 new.xml
루트 노드에서 :
xml ed -N x="http://maven.apache.org/POM/4.0.0" \
-s '/x:project' -t elem -n 'distributionManagement' \
-v "$(<new.xml)" file.xml | xml unesc | xml fo
XMLStarlet은 <
및 등의 이스케이프가 필요한 데이터를 자동으로 이스케이프합니다 >
. xml unesc
비트 을 이스케이프 삽입 된 데이터 (또는 실제로 문제가되지 않을 수도 전체 문서를 언 이스케이프) 및 xml fo
재 포맷 생성 XML 문서.
결과는
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- a lot of other tags-->
<distributionManagement>
<repository>
<id>private-releases</id>
<url>https://my.private.server.com/nexus/repository/maven-releases/</url>
</repository>
</distributionManagement>
</project>
나는 이런 식으로하는 것이 조금 불편하다. 그러나 "작동한다".
StackOverflow 에서이 관련 질문을 참조하십시오 : https : //.com/questions/29298507/xmlstarlet-xinclude-xslt