如何将 BPEL 变量放入外壳变量中



一个BPEL进程创建一个XML文档,一个具有xml结构的XSD文件,我想用xmllint解析BPEL变量,或者用Unix shell命令行命令解析xmlstarlet。 这可能吗?

如何将 BPEL 变量放入 shell 变量中,以便能够使用 XMLLINT 解析它?

输入:

<?xml version="1.0"?>
<ns:ItemList xmlns:ns="http:///blabla">
    <GenericItem>
        <ns2:LocalItem xmlns:ns2="http:///blabla">
            <ItemSource> </ItemSource>
            <ConcItemSource>
                <name></name>
                <requirements/>
                <strategy/>
            </ConcItemSource>
            <dataFormat/>
            <directory></directory>
            <file/>
        </ns2:LocalItem>
    </GenericItem>
    <GenericItem>
        <ns2:LocalItem xmlns:ns2="http:///blabla">
            <ItemSource>
            </ItemSource>
            <ConcItemSource>
                <name></name>
                <requirements/>
                <strategy/>
            </ConcItemSource>
            <dataFormat/>
            <directory></directory>
            <file/>
        </ns2:LocalItem>
    </GenericItem>
</ns:ItemList>

使用 xmlstarlet :

$ cat bpel.xml
<?xml version="1.0"?>
<ns:ItemList xmlns:ns="http:///blabla">
    <GenericItem>
        <ns2:LocalItem xmlns:ns2="http:///blabla">
            <ItemSource> </ItemSource>
            <ConcItemSource>
                <name></name>
                <requirements/>
                <strategy/>
            </ConcItemSource>
            <dataFormat/>
            <directory>d1</directory>
            <file/>
        </ns2:LocalItem>
    </GenericItem> 
    <GenericItem>
        <ns2:LocalItem xmlns:ns2="http:///blabla">
            <ItemSource>
            </ItemSource>
            <ConcItemSource>
                <name></name>
                <requirements/>
                <strategy/>
            </ConcItemSource>
            <dataFormat/>
            <directory>d2</directory>
            <file/>
        </ns2:LocalItem>
    </GenericItem>
</ns:ItemList>

命令行:

$ dir1=$(xmlstarlet sel -t -v '//directory[1]/text()' bpel.xml)
$ echo "$dir1"
d1

使用 for 循环:

$ count=$(xmlstarlet sel -t -v 'count(//directory)' bpel.xml)
$ for ((i=1; i<=count; i++)) {
    xmlstarlet sel -t -v "//directory[$i]/text()" bpel.xml >> newfile
}

但你可以简单地做:

$ xmlstarlet sel -t -v "//directory/text()" bpel.xml >> newfile

来自STDIN的XMLSTARLET:

command_producing_xml | xmlstarlet sel -t -v "//directory/text()" -

相关内容

  • 没有找到相关文章

最新更新