我正在尝试将XML字符串解析为可用于轻松搜索的文档。但是,当我遇到某些类型的XML时,它似乎不起作用。永远不会构造文档,并且当它遇到像我在底部的XML消息时为空。我的try / catch
中的任何内容都不会引发重复操作我的代码目前看起来像这样:
Document convertMessageToDoc(String message){
Document doc = null;
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(message));
doc = db.parse(is);
}
catch (Exception e) {
//e.printStackTrace();
doc = null;
}
return doc;
}
我有什么方法可以使用这样的东西:
<ns1:SubmitFNOLResponse xmlns:ns1="http://website.com/">
<ns1:FNOLReporting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns1:FNOLReporting">
<ns1:FNOLResponse>
<ns1:FNOLStatusInfo>
<ns1:StatusCode>0</ns1:StatusCode>
<ns1:StatusMessages />
</ns1:FNOLStatusInfo>
</ns1:FNOLResponse>
</ns1:FNOLReporting>
</ns1:SubmitFNOLResponse>
答案 0 :(得分:1)
看起来您的文档不是“格式良好”。您需要一个根元素,其中根目录中有两个兄弟“ns1:Prod”标记。
答案 1 :(得分:0)
您的文档格式不是格式良好的XML。一旦它出现,一切似乎都按预期工作。
String message =
"<ns1:Prods xmlns:ns1='/foo'>"// xmlns:ns1='uri'>"
+ "<ns1:Prod>"
+ " <ns1:ProductID>316</ns1:ProductID>"
+ " <ns1:Name>Blade</ns1:Name>"
+ "</ns1:Prod>"
+ "<ns1:Prod>"
+ " <ns1:ProductID>317</ns1:ProductID>"
+ " <ns1:Name>LL Crankarm</ns1:Name>"
+ " <ns1:Color>Black</ns1:Color>"
+ "</ns1:Prod>"
+ "</ns1:Prods>";
Document doc = null;
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
dbf.setValidating(false);
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(message));
doc = db.parse(is);
NodeList sections = doc.getElementsByTagName("ns1:Prod");
int numSections = sections.getLength();
for (int i = 0; i < numSections; i++) {
Element section = (Element) sections.item(i);
NodeList prodinfos = section.getChildNodes();
for (int j = 0; j < prodinfos.getLength(); j++) {
Node info = prodinfos.item(j);
if (info.getNodeType() != Node.TEXT_NODE) {
System.out.println(info.getNodeName() + ": " + info.getTextContent());
}
}
System.out.println("");
}
} catch (Exception e) {
e.printStackTrace();
doc = null;
}
// Outputs
ns1:ProductID: 316
ns1:Name: Blade
ns1:ProductID: 317
ns1:Name: LL Crankarm
ns1:Color: Black