Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
xmlstarlet选择具有特定属性值的节点_Xml_Bash_Xpath_Attributes_Xmlstarlet - Fatal编程技术网

xmlstarlet选择具有特定属性值的节点

xmlstarlet选择具有特定属性值的节点,xml,bash,xpath,attributes,xmlstarlet,Xml,Bash,Xpath,Attributes,Xmlstarlet,我对这一切都是陌生的,所以如果答案是显而易见的,请原谅我!我有一个从NCBI下载的XML文档,我正试图从每个条目中提取主机信息,看起来有点像这样(但嵌套得更深): 但问题是,有时OrgMod节点中的信息或多或少,而主机并不总是位于第二个位置。因此,我已经尝试了此应用程序的每个版本,以尝试选择特定的主机节点: xml sel -t -m //OrgMod/OrgMod_subtype[@value=nat-host] -v ../OrgMod_subname -n file.xml 我想选择具有

我对这一切都是陌生的,所以如果答案是显而易见的,请原谅我!我有一个从NCBI下载的XML文档,我正试图从每个条目中提取主机信息,看起来有点像这样(但嵌套得更深):

但问题是,有时OrgMod节点中的信息或多或少,而主机并不总是位于第二个位置。因此,我已经尝试了此应用程序的每个版本,以尝试选择特定的主机节点:

xml sel -t -m //OrgMod/OrgMod_subtype[@value=nat-host] -v ../OrgMod_subname -n file.xml
我想选择具有nat host属性的OrgMod_子类型节点,然后用物种名称打印同级(?)OrgMod_子名称节点

任何帮助都将不胜感激

试着这样做:

 //OrgMod[OrgMod_subtype/@value = 'nat-host']/OrgMod_subname/text()

据我所见,唯一能将兄弟姐妹称为“兄弟姐妹”的方法是去找父母。例如,我测试时出现以下错误:

$ xmlstarlet sel -t -m "//OrgMod/[OrgMod_subtype/@value='nat-host']/OrgMod_subname/text()" file.xml
Invalid expression: //OrgMod/[OrgMod_subtype/@value='nat-host']/OrgMod_subname/text()
compilation error: element for-each
xsl:for-each : could not compile select expression '//OrgMod/[OrgMod_subtype/@value='nat-host']/OrgMod_subname/text()'
因此,我即兴创作了。/,这部作品:

$ xmlstarlet sel -t -m "//OrgMod/OrgMod_subtype[@value='nat-host']" -v "../OrgMod_subname/text()" file.xml
Homo sapiens~
$
我的xmlstarlet版本是:

$ xmlstarlet --version
1.6.1
compiled against libxml2 2.9.1, linked with 20904
compiled against libxslt 1.1.28, linked with 10129
$

-bash:意外标记“”附近出现语法错误('我在尝试使用[last()]时也遇到此错误-我缺少什么吗?我使用的是OXgen。它工作正常。此表达式返回:智人。请尝试将xpath括在引号中:
xml sel-t-m//OrgMod[OrgMod_subtype/@value='nat host']/OrgMod_subname/text()-n file.xml'
我想出来了。TextEdit“聪明地修正”了我的引号,bash不喜欢。谢谢!
$ xmlstarlet sel -t -m "//OrgMod/OrgMod_subtype[@value='nat-host']" -v "../OrgMod_subname/text()" file.xml
Homo sapiens~
$
$ xmlstarlet --version
1.6.1
compiled against libxml2 2.9.1, linked with 20904
compiled against libxslt 1.1.28, linked with 10129
$