【发布时间】:2021-03-10 05:15:32
【问题描述】:
我有一个 XML 文件,其中包含一些以特定关键词为特征的条目。 我需要在条目上运行一个 for 循环,为每个条目提取两个不同的关键字,以便它们在 for 循环中用作变量。
这是一个list.xml的例子:
<?xml version="1.0" encoding="UTF-8"?>
<responses type="C-FIND">
<data-set xfer="1.2.840.10008.1.2.1" name="Little Endian Explicit">
<element tag="0008,0005" vr="CS" vm="1" len="10" name="SpecificCharacterSet">ISO_IR 192</element>
<element tag="0008,0052" vr="CS" vm="1" len="6" name="QueryRetrieveLevel">STUDY</element>
<element tag="0008,0054" vr="AE" vm="1" len="8" name="RetrieveAETitle">PLATONE</element>
<element tag="0010,0010" vr="PN" vm="1" len="16" name="PatientName">Anon^1600373003</element>
<element tag="0020,000d" vr="UI" vm="1" len="42" name="StudyInstanceUID">1.3.76.13.99972.2.20181217085753.1484038.1</element>
</data-set>
<data-set xfer="1.2.840.10008.1.2.1" name="Little Endian Explicit">
<element tag="0008,0005" vr="CS" vm="1" len="10" name="SpecificCharacterSet">ISO_IR 192</element>
<element tag="0008,0052" vr="CS" vm="1" len="6" name="QueryRetrieveLevel">STUDY</element>
<element tag="0008,0054" vr="AE" vm="1" len="8" name="RetrieveAETitle">PLATONE</element>
<element tag="0010,0010" vr="PN" vm="1" len="16" name="PatientName">Anon^1599844862</element>
<element tag="0020,000d" vr="UI" vm="1" len="42" name="StudyInstanceUID">1.3.76.13.99972.2.20180925142630.1456727.1</element>
</data-set>
</responses>
我需要提取关键字“PatientName”和“StudyInstanceUID”。 我尝试使用这样的东西:
grep -A2 -i "PatientName" list.xml | while read -r string ; do
PatientName="$(echo $string | grep -i "PatientName" | cut -d ">" -f 2 | cut -d "<" -f 1)"
StudyInstanceUID="$(echo $string | grep -i "StudyInstanceUID" | cut -d ">" -f 2 | cut -d "<" -f 1)"
echo "$PatientName"
echo "$StudyInstanceUID"
done
问题是我得到了很多空行! 有什么问题?
[编辑] 我想从这个例子中得到的是这样的:
Anon^1600373003
1.3.76.13.99972.2.20181217085753.1484038.1
Anon^1599844862
1.3.76.13.99972.2.20180925142630.1456727.1
非常感谢。
伊万
【问题讨论】:
-
使用像 xmllint 这样的专用工具
-
echo 只是一个示例,我需要在 bash 脚本中实现它以使用关键字执行其他操作。
-
@I.Iudice - 不清楚您说 “我需要提取关键字“PatientName”和“StudyInstanceUID””时的意思。你到底想达到什么目的?是给 A) 赋值吗?将
Anon^1600373003和Anon^1599844862分配给PatientName变量,同样将1.3.76.13.99972.2.20181217085753.1484038.1和1.3.76.13.99972.2.20180925142630.1456727.1分配给StudyInstanceUID变量。 B) 或者,只是将结果打印(回显)到控制台,就像您显示的那样? 3) 还是别的什么? -
我一直在努力实现A),我必须使用这些变量来运行信号处理算法。