我有输入xml
<IndexCatalogueRecord SeriesNumber="1" SeriesVolume="3" SeriesPage="594">
<IndexCatalogueID>10305941390</IndexCatalogueID>
<GeneralNote>[Shelved in: B.58]</GeneralNote>
<GeneralNote>[Shelved in: B.458]</GeneralNote>
<GeneralNote>[Shelved in: B.20]</GeneralNote>
<Language>fr</Language>
</IndexCatalogueRecord>
并且我需要一种解决方案,以将GeneralNote元素属性组合在一起并用逗号定界符分隔,以便变得]]
<IndexCatalogueRecord SeriesNumber="1" SeriesVolume="3" SeriesPage="594"> <IndexCatalogueID>10305941390</IndexCatalogueID> <GeneralNote>[Shelved in: B.58, B.458, B.20]</GeneralNote> <Language>fr</Language> </IndexCatalogueRecord>
[我的方法是让xmlstarlet查询元素的属性值,然后通过管道将其传递给grep或awk。我可以使用xmlstarlet从GeneralNote轻松获取属性的值
xmlstarlet sel -t -m "//GeneralNote" -v . -n test.xml
但是当我尝试将控制台输出传递给grep以使其去除匹配字符串“ [Shelved in:”和“]”时,我遇到了一些麻烦,请告诉我是否有更优雅的解决方案。在此先感谢
我有输入xml
一种可能的方法是使用两个嵌套的xmlstarlet
命令(请注意表达式中文件名的两次出现):