Xml 基于另一个值获取一个值
我正在使用Java和导入javax.xml.xpath.*包 我是XPATH的初学者,无法基于另一个值恢复值 这里是my.xml文件Xml 基于另一个值获取一个值,xml,xpath,Xml,Xpath,我正在使用Java和导入javax.xml.xpath.*包 我是XPATH的初学者,无法基于另一个值恢复值 这里是my.xml文件 <lom:lom xmlns:lom="http://ltsc.ieee.org/xsd/LOM" xmlns:lomfr="http://www.lom-fr.fr/xsd/LOMFR" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <lom:general>
<lom:lom xmlns:lom="http://ltsc.ieee.org/xsd/LOM" xmlns:lomfr="http://www.lom-fr.fr/xsd/LOMFR" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<lom:general>
...
<lom:title>
<lom:string language="fre">Analyse financière bilan : Un exemple d'approche financière par la méthode des ratios - la centrale de bilans de la Banque de France</lom:string>
</lom:title>
...
</lom:general>
<lom:lifeCycle>
...
<lom:contribute>
<lom:role>
<lom:source>LOMv1.0</lom:source>
<lom:value>author</lom:value>
</lom:role>
<lom:entity>BEGIN:VCARD VERSION:3.0 N:GARROT;Thierry;;; FN:Thierry GARROT EMAIL;TYPE=INTERNET:thierry.garrot@unice.fr ORG:Université de Nice END:VCARD</lom:entity>
<lom:date>
<lom:dateTime>2009-10-07</lom:dateTime>
</lom:date>
</lom:contribute>
<lom:contribute>
<lom:role>
<lom:source>LOMv1.0</lom:source>
<lom:value>instructional designer</lom:value>
</lom:role>
<lom:entity>BEGIN:VCARD VERSION:3.0 N:CASANOVA;Gérard;;; FN:Gérard CASANOVA EMAIL;TYPE=INTERNET:gerard.casanova@univ-nancy2.fr ORG:Université de Lorraine END:VCARD</lom:entity>
<lom:date>
<lom:dateTime>2009-10-07</lom:dateTime>
</lom:date>
</lom:contribute>
<lom:contribute>
...
</lom:contribute>
...
</lom:lifeStyle>
</lom>
...
试析法兰西-比兰:非法国
...
...
LOMv1.0
作者
开始:VCARD版本:3.0 N:GARROT;蒂埃里;;;FN:Thierry GARROT电子邮件;类型=互联网:蒂埃里。garrot@unice.fr组织:尼斯大学结束:VCARD
2009-10-07
LOMv1.0
教学设计师
开始:VCARD版本:3.0 N:CASANOVA;杰拉德;;;FN:Gérard CASANOVA电子邮件;类型=互联网:杰拉德。casanova@univ-nancy2.fr组织:洛林大学结束:VCARD
2009-10-07
...
...
仅当lom:value
值为author
时,如何获取lom:entity
值
lom:entity
是一个VCARD,但我认为这是一个问题,因为我有一个获取作者全名的算法
示例:
要获取lom:title
我使用:/*[local-name()='title']/*[local-name()='string']/text()
谢谢你的帮助 您要查找的XPath表达式是(需要正确的命名空间处理):
这将为您提供所需的内容
上面XPath表达式的名称空间忽略变量为
/*[local-name()='lom']/*[local-name()='lifeCycle']/*[local-name()='contribute'][*[local-name()='role']/*[local-name()='value'] = 'author']/*[local-name()='entity']
仅当lom:value
值为author
时,如何获取lom:entity
值
xpath
表达式:
//lom:entity[parent::lom:contribute/lom:role/lom:value="author"]/text()
像zx485一样,我得到一个空结果://N.Lamblin,用XML验证器验证您的输入结构beforehand@N.Lamblin:我的假设是正确的名称空间处理。我只能猜测这就是你的问题。可能。。。但在这种情况下,为什么获取标题的表达式有效/@N.Lamblin:因为你的表达式*[local-name()='title']
和*[local-name()='string']
跳过了任何名称空间。我要为我的表达式添加一个名称空间无关的版本。@N.Lamblin:我添加了一个(有点可笑的)版本的答案。它确实可以工作,但以前的版本要优雅得多。很抱歉提到这一点。对于忽略名称空间的版本,它可以正常工作。非常感谢!我将试图理解为什么第一个版本不起作用…:)
//lom:entity[parent::lom:contribute/lom:role/lom:value="author"]/text()