Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
Xml 基于另一个值获取一个值_Xml_Xpath - Fatal编程技术网

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>

我正在使用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: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()