Linux xml parse - PullRequest
       42

Linux xml parse

0 голосов
/ 27 ноября 2018

Я пытаюсь разобрать часть файла XML с помощью xmllint, но не могу заставить его работать.

Вот часть, которая меня интересует:

    <?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>, например?Должен ли я избежать знака :?

1 Ответ

0 голосов
/ 27 ноября 2018

Материал перед двоеточием является префиксом пространства имен.Вам необходимо зарегистрировать пространство имен и использовать его в выражениях 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"
...