からデータを抽出しようとしていXML file via XPath
ます。私のコードはXML
名前空間なしで動作しますが、私のコードには名前空間があるため、必要なNamespaceContext
ものをXPathオブジェクトに追加しました。残念ながら、XPath
はデータを配信しなかったため、いじくり回した後、コードは変更されませんでしたが、このjarファイルが xmlparserv2.jar
クラスパスに追加されました。そして出来上がり、突然すべてが完璧に機能します。
jarには、すでにJDK
(1.7.0_15)にあるが、おそらく異なるバージョンのクラスが含まれていることがわかります。
だから私の質問は
JDK
a)エンドレスでデバッグしなければならないこと以外に、元のクラスの何が問題になっているのかを知る方法はありclasses
ますか?
b)別の解決策/追加の「不要な」ものを出荷する必要がないようにコードを変更する方法について誰かが考えていjar
ますか?
ありがとうサイモン
それが問題のコードです:
public class JavaApplication1 {
public static void main(String[] args) throws IOException, SAXException {
Document doc = createDoc("Persons.xml");
parseSFMessage(doc);
}
private static void parseSFMessage(Node node) {
if (node.getNodeName().startsWith("Persons:person") && node.hasChildNodes()) {
print("PLZ: " + getNodeValue(node, "ns1:PLZ"));
}
NodeList nodeList = node.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
Node currentNode = nodeList.item(i);
if (currentNode.getNodeType() == Node.ELEMENT_NODE) {
parseSFMessage(currentNode);
}
}
}
private static Document createDoc(String s) {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
Document doc = null;
try {
builder = factory.newDocumentBuilder();
doc = builder.parse(new FileInputStream(s));
} catch (SAXException e) {
} catch (IOException e) {
} catch (ParserConfigurationException e) {
}
return doc;
}
private static String getNodeValue(Node dom, String element) {
NamespaceContext ctx = new NamespaceContext() {
public String getNamespaceURI(String prefix) {
String uri;
if (prefix.equals("ns1")) {
uri = "http://someurl.com/schemas/class/Utils";
} else {
uri = null;
}
return uri;
}
public Iterator getPrefixes(String val) {
return null;
}
public String getPrefix(String uri) {
return null;
}
};
String result = null;
XPathFactory xpf = XPathFactory.newInstance();
XPath xp = xpf.newXPath();
xp.setNamespaceContext(ctx);
try {
result = xp.evaluate(element, dom);
} catch (XPathExpressionException e) {
e.printStackTrace();
}
return result;
}
private static void print(Object o) {
if (o != null) {
System.out.println(o.toString());
}
}
}