に割り当てる:コマンドを実行私は、次のXML持つXMLパーサーを使用してXML要素から値を取得し、変数
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns="http://maven.apache.org/POM/4.0.0" exclude-result-prefixes="ns">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="ns:project">
<xsl:element name="ns:groupId">
<xsl:value-of select="ns:groupId"/>
</xsl:element>
<xsl:element name="ns:artifactId">
<xsl:value-of select="ns:artifactId"/>
</xsl:element>
<xsl:element name="ns:version">
<xsl:value-of select="ns:version"/>
</xsl:element>
<xsl:element name="ns:packaging">
<xsl:value-of select="ns:packaging"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
:xsltprocの私は、次のXSLTスタイルシートを持っている
また <?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>BundleResourceDeploy</groupId>
<artifactId>Project3</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>sbar</packaging>
<description></description>
</project>
を
出力(のOutput.xmlファイルの内容)のOutput.xml "スタイルシート" "xml_fileは">です:
<ns:groupId xmlns:ns="http://maven.apache.org/POM/4.0.0">BundleResourceDeploy</ns:groupId><ns:artifactId xmlns:ns="http://maven.apache.org/POM/4.0.0">Project2</ns:artifactId><ns:version xmlns:ns="http://maven.apache.org/POM/4.0.0">1.0-SNAPSHOT</ns:version><ns:packaging xmlns:ns="http://maven.apache.org/POM/4.0.0">sbar</ns:packaging>
達成したいことは次のとおりです。 シェルスクリプトで、 "BundleResourceDeploy"という要素 "groupId"の値を取得し、それを変数に割り当てたいとします。
これを達成する方法について教えてください。しかし、どのようなそのスクリプト内xmlstarlet
コマンドが実際にはあなたがすることによってあなたのために生成するXMLStarletを求めることができ、わずかに異なるXSLTテンプレート、と全く同等である
#!/bin/bash
# ^^^^-- NOT /bin/sh; process substitution is an extension in ksh and bash
# $'' literal syntax is an extension as well, likewise read -d
IFS=$'\n' read -r -d '' groupId artifactId version packaging < <(
xmlstarlet sel \
-N ns='http://maven.apache.org/POM/4.0.0' \
-t -m /ns:project \
-v ns:groupId -n \
-v ns:artifactId -n \
-v ns:version -n \
-v ns:packaging -n \
<pom.xml && printf '\0'
)
echo "pom.xml is for $groupId/$artifactId, version $version, with packaging $packaging"
:
xmlshツールを見て、別の可能性があるが –