我已经在Java/XPath和Namepsaces这个主题上看到了相当多的讨论,但我不确定这些问题的答案可以帮助解决我的特定问题。XML格式未知时的Java XPath命名空间
我有一个程序可以获得一些XML - 我不知道预先格式,但它可能包含名称空间。用户可以提供一个xpath表达式,用于从XML中提取特定的数据。代码是通用的 - 我不能在任何命名空间或类似的东西中进行协调,因为我不知道XML预先的格式。
所以XML可能看起来像这样:
<ns1:item id='myroot' xmlns:ns1='http://www.myplace.com/place'>
<ns1:category id='cat1'>
<ns1:item id='item1'>
<ns1:category id='cat2'></ns1:category>
</ns1:item>
</ns1:category>
</ns1:item>
和用户输入的可能是XPath的,说:
/ns1:item[@id='myroot']/ns1:category[@id='cat1']
,但与下面的代码,我总是得到什么(不管什么XPath我似乎尝试):
public static String evaluate(String xml, String xpathExpression) throws Exception
{
String result = "";
InputSource is = new InputSource(new StringReader(xml));
XPath xPath = XPathFactory.newInstance().newXPath();
result = xPath.evaluate(xpathExpression, is);
System.out.println("result=" +result);
}
任何帮助非常感谢。
感谢
您可以禁用命名空间支持,但在运动前我没有实际的代码。这是一个单一的行,所以一点点,但谷歌搜索应该为你解决它 – MadProgrammer 2013-03-18 20:24:45
谢谢你。我将代码更改为此,并且所有工作都正常: 'String result =“”; DocumentBuilderFactory xmlFactory = DocumentBuilderFactory.newInstance(); xmlFactory.setNamespaceAware(false); DocumentBuilder builder = xmlFactory.newDocumentBuilder(); InputSource is = new InputSource(new StringReader(xml)); Document document = builder.parse(is); XPath xPath = XPathFactory.newInstance()。newXPath(); result = xPath.evaluate(xpathExpression,document); 返回结果;' – user265330 2013-03-19 10:24:07
是的,这看起来是正确的 – MadProgrammer 2013-03-19 10:32:34