2017-08-04 55 views
0

我有下面的XML输入:提取值当有命名空间

 <?xml version="1.0" encoding="UTF-8"?> 
<createdInstances xmlns="http://www.company.com/awd/rest/v1" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <folderInstance recordType="folder" id="2017-08-04-04.22.02.446460F01"> 
     <link rel="form" type="application/vnd.company.awd+xml" href="awdServer/awd/services/v1/instances/2017-08-04-04.22.02.446460F01/form" /> 
     <link rel="history" type="application/vnd.company.awd+xml" href="awdServer/awd/services/v1/instances/2017-08-04-04.22.02.446460F01/history" /> 
    </folderInstance> 
</createdInstances> 

我需要的XPath使用Java的folderInstanceid值(即2017-08-04-04.22.02.446460F01在这种情况下)。我试着用下面的表达式,但它不工作。

//createdInstances/[email protected] 

任何帮助,将不胜感激。

回答

1

您忘记了匹配节点的名称空间。创建(在XSLT这样)中的XPath命名空间

xmlns:com="http://www.company.com/awd/rest/v1" 

和命名空间前缀添加到该元素的名称。在选择属性之前,还要添加/

//com:createdInstances/com:folderInstance/@id 

如果您使用的是Java this SO posting显示了如何将NamespaceContext添加到您的XPath表达式。这也显示了另一个(不太精确的)方法仅是这样的元素的本地部分匹配:

//*[local-name()='createdInstances']/*[local-name()='folderInstance']/@id 
+0

我没有使用任何XSLT在这里,但我使用Java。如何在java中处理它?任何想法? –

+0

加一个快速响应 –