Linux xml 解析
Linux xml parse
我正在尝试使用 xmllint 解析 xml 文件的一部分,但我无法让它工作。
以下是我感兴趣的部分:
<?xml version="1.0" encoding="UTF-8"?>
<S2SCTIcf:SCTIcfBlkCredTrf xmlns:S2SCTIcf="urn:S2SCTIcf:xsd:$SCTIcfBlkCredTrf" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:S2SCTIcf:xsd:$SCTIcfBlkCredTrf SCTIcfBlkCredTrf.xsd">
<S2SCTIcf:SndgInst>AAAAAAAA</S2SCTIcf:SndgInst>
<S2SCTIcf:RcvgInst>BBBBBBBB</S2SCTIcf:RcvgInst>
<S2SCTIcf:FileRef>ISCT181127000006</S2SCTIcf:FileRef>
<S2SCTIcf:SrvcId>SCT</S2SCTIcf:SrvcId>
<S2SCTIcf:TstCode>T</S2SCTIcf:TstCode>
<S2SCTIcf:FType>ICF</S2SCTIcf:FType>
<S2SCTIcf:FDtTm>2018-11-27T17:01:41.198+00:00</S2SCTIcf:FDtTm>
<S2SCTIcf:NumCTBlk>1</S2SCTIcf:NumCTBlk>
<S2SCTIcf:NumPCRBlk>0</S2SCTIcf:NumPCRBlk>
<S2SCTIcf:NumRFRBlk>0</S2SCTIcf:NumRFRBlk>
<S2SCTIcf:NumROIBlk>0</S2SCTIcf:NumROIBlk>
<S2SCTIcf:NumSRBlk>0</S2SCTIcf:NumSRBlk>
<S2SCTIcf:FIToFICstmrCdtTrf xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.02">
例如,有没有办法从标签 <S2SCTIcf:FDtTm>
中获取值?我应该转义 :
标志吗?
冒号前的内容是名称 space 前缀。您需要注册名称space 并在 XPath 表达式中使用它:
setns s=urn:S2SCTIcf:xsd:$SCTIcfBlkCredTrf
cat //s:FDtTm/text()
所以,整个脚本可以是这样的
#!/bin/bash
ext=$(cat <<'EOF' \
| xmllint --shell file.xml \
| grep -A1 -- '-------' \
| tail -n1
setns s=urn:S2SCTIcf:xsd:$SCTIcfBlkCredTrf
cat //s:FileRef/text()
EOF
)
echo "$ext"
我正在尝试使用 xmllint 解析 xml 文件的一部分,但我无法让它工作。
以下是我感兴趣的部分:
<?xml version="1.0" encoding="UTF-8"?>
<S2SCTIcf:SCTIcfBlkCredTrf xmlns:S2SCTIcf="urn:S2SCTIcf:xsd:$SCTIcfBlkCredTrf" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:S2SCTIcf:xsd:$SCTIcfBlkCredTrf SCTIcfBlkCredTrf.xsd">
<S2SCTIcf:SndgInst>AAAAAAAA</S2SCTIcf:SndgInst>
<S2SCTIcf:RcvgInst>BBBBBBBB</S2SCTIcf:RcvgInst>
<S2SCTIcf:FileRef>ISCT181127000006</S2SCTIcf:FileRef>
<S2SCTIcf:SrvcId>SCT</S2SCTIcf:SrvcId>
<S2SCTIcf:TstCode>T</S2SCTIcf:TstCode>
<S2SCTIcf:FType>ICF</S2SCTIcf:FType>
<S2SCTIcf:FDtTm>2018-11-27T17:01:41.198+00:00</S2SCTIcf:FDtTm>
<S2SCTIcf:NumCTBlk>1</S2SCTIcf:NumCTBlk>
<S2SCTIcf:NumPCRBlk>0</S2SCTIcf:NumPCRBlk>
<S2SCTIcf:NumRFRBlk>0</S2SCTIcf:NumRFRBlk>
<S2SCTIcf:NumROIBlk>0</S2SCTIcf:NumROIBlk>
<S2SCTIcf:NumSRBlk>0</S2SCTIcf:NumSRBlk>
<S2SCTIcf:FIToFICstmrCdtTrf xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.02">
例如,有没有办法从标签 <S2SCTIcf:FDtTm>
中获取值?我应该转义 :
标志吗?
冒号前的内容是名称 space 前缀。您需要注册名称space 并在 XPath 表达式中使用它:
setns s=urn:S2SCTIcf:xsd:$SCTIcfBlkCredTrf
cat //s:FDtTm/text()
所以,整个脚本可以是这样的
#!/bin/bash
ext=$(cat <<'EOF' \
| xmllint --shell file.xml \
| grep -A1 -- '-------' \
| tail -n1
setns s=urn:S2SCTIcf:xsd:$SCTIcfBlkCredTrf
cat //s:FileRef/text()
EOF
)
echo "$ext"