Java XPath前缀必须解析为名称空间

时间:2020-05-19 13:39:07

标签: xpath

我很难让XPath表达式与Java一起使用。我正在使用XPath 1.0。

如果我使用https://www.freeformatter.com/xpath-tester.html,则可以进行以下操作:

/*:configuration/*:connectionStrings/*:add[@*:name= 'Data.Server.ConnectionString']/@name

当我在Java程序中尝试相同操作时,它会给我:

com.sun.org.apache.xpath.internal.domapi.XPathStylesheetDOM3Exception: Prefix must resolve to a namespace: 

由于我使用的是XPath 1.0,所以我尝试用local-name()替换:,但是没有运气。

这是源文档

    <?xml version="1.0" encoding="UTF-8" standalone="no"?><configuration>
<configSections>
<sectionGroup name="telerik.web.ui">
  <section allowDefinition="MachineToApplication" name="radCompression" requirePermission="false" type="Telerik.Web.UI.RadCompressionConfigurationSection, Telerik.Web.UI, PublicKeyToken=121fae78165ba3d4"/>
</sectionGroup>
</configSections>
<telerik.web.ui>
  <radCompression enablePostbackCompression="true"/>
</telerik.web.ui>
  <appSettings>
      <add key="InfrastructureConfig.Server" value="[App.BaseDirectory]\infrastructure.config"/>
      <add key="InfrastructureConfig.Debug" value="[App.BaseDirectory]\Infrastructure.config"/>
      <add key="ValidationSettings:UnobtrusiveValidationMode" value="None"/>
      <add key="Telerik.ScriptManager.TelerikCdn" value="Disabled"/>
      <add key="Telerik.StyleSheetManager.TelerikCdn" value="Disabled"/>
      <add key="vs:EnableBrowserLink" value="false"/>
  </appSettings>
<connectionStrings>
    <add connectionString="data source=[DB.Instance.Name];persist security info=True;user id=[DB.UserName];password=[DB.Password]" name="Data.Server.ConnectionString"/>
    <add connectionString="data source=[DB.Instance.Name];persist security info=True;user id=[DB.UserName];password=[DB.Password]" name="Data.Debug.ConnectionString"/>
</connectionStrings>

</configuration>

我需要返回connectionString和名称。

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

语法*:xxx需要XPath 2.0+。升级到XPath 2.0处理器(Java世界中有几种可用的处理器),或者如果需要,请使用变通办法*[local-name()='xxx']

答案 1 :(得分:0)

一种最简单(但安全性较差)的方法可能是:

//*[@connectionString and @name]/@*

如果遇到错误,请使用:

//*[@connectionstring and @name]/@*