我已經在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