Linux xml解析

Linux xml解析,xml,linux,xml-parsing,xmllint,Xml,Linux,Xml Parsing,Xmllint,我试图使用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=

我试图使用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">

AAAAA
bbbbbbbbbb
ISCT181127000006
SCT
T
ICF
2018-11-27T17:01:41.198+00:00
1.
0
0
0
0

例如,有没有办法从标记
中获取值?是否应转义
符号?

冒号前的内容是名称空间前缀。您需要注册命名空间并在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"
#/bin/bash

ext=$(cat冒号前的内容是名称空间前缀。您需要注册名称空间并在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"
!/bin/bash

分机=$(cat我看到了一个XML片段,但不是您尝试过的内容或失败的方式?事实上,这是离题的…我尝试了命令
xmllint--shell file.XML我看到了一个XML片段,但不是您尝试过的内容或失败的方式?事实上,这是离题的…我尝试了命令
xmllint--shell file.XML嗨,谢谢您的解决方案tion.有没有办法将以下命令的输出存储到bash变量中?
xmllint--shell文件名| awk'FNR==2{print$0}'| cut-c1-1
。我是这样尝试的
!/usr/bin/bash#set-x echo'setns s=urn:S2SCTCvf:xsd:$SCTCvfBlkCredTrf cat//s:FileRef/text()'\ext$(xmllint--shell文件名| awk'FNR=={打印$0}'|剪切-c 1-1)echo$ext
但它似乎不起作用。解决方案不起作用的原因:管道中的命令在子shell中执行。变量值的更改不会从子shell传播到父shell。您好,感谢您提供的解决方案。有没有办法将以下命令的输出存储到bash变量中?
xmllint--shell文件名| awk'FNR==2{print$0}'| cut-c1-1
。我是这样尝试的
|!/usr/bin/bash#set-x echo'setns s=urn:S2SCTCvf:xsd:$SCTCvfBlkCredTrf cat//s:FileRef/text()'\ext=$(xmllint--shell文件名| awk'FNR==2{print$0}cut-c1-1)echo$ext
但它似乎不起作用。解决方案不起作用的原因:管道中的命令在子shell中执行。变量值的更改不会从子shell传播到父shell。