#java #xml #xml-parsing
#ява #xml — файл #xml-синтаксический анализ #java #xml
Вопрос:
у меня есть следующий xml :
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<processid>processid_1111</processid>
<suggestion>
<geo1>a</geo1>
<geo2>b</geo2>
<geo3>c</geo3>
<standarddatasuggestion>account1</standarddatasuggestion>
</suggestion>
<suggestion>
<geo1>d</geo1>
<geo2>e</geo2>
<geo3>f</geo3>
<geo4>g</geo4>
<standarddatasuggestion>account2</standarddatasuggestion>
</suggestion>
<taskid>taskid_111</taskid>
</root>
я хочу разработать метод, который может принимать имя узла и на основе имени узла возвращать соответствующий узел и его значение в объектах карты. пожалуйста, помогите мне разобраться с вышеуказанной проблемой.
я попробовал это:
public SortedMap[] getObjectValueFromXML(Object xmlObject)
{
Node item = null;
SortedMap[] map = null;
String subchildnodeName = null;
String subchildnodeValue = null;
Map subchildmap[] = null;
try {
if (xmlObject == null) {
throw new NullPointerException("XML object found null");
}
factory = DocumentBuilderFactory.newInstance();
builder = factory.newDocumentBuilder();
doc = builder.parse(new ByteArrayInputStream(xmlObject.toString().getBytes()));
doc.getDocumentElement().normalize();
node = doc.getDocumentElement();
root = node.getNodeName();
nList = doc.getElementsByTagName(root);
for (int temp = 0; temp < nList.getLength(); temp ) {
nNode = nList.item(temp);
NodeList childNodes = nNode.getChildNodes();
int length = childNodes.getLength();
map = new TreeMap[length];
String nodeValues[][] = new String[length][2];
for (int i = 0; i < length; i ) {
item = nNode.getChildNodes().item(i);
String parentnodeName = item.getNodeName();
int noderepetationlength = doc.getElementsByTagName(parentnodeName).getLength();
// System.out.println(noderepetationlength);
NodeList rootchildNodes = item.getChildNodes();
String parentnodeValue = rootchildNodes.item(0).getNodeValue();
map[i] = new TreeMap();
if (parentnodeName != null amp;amp; parentnodeValue != null amp;amp; noderepetationlength <= 1) {
map[i].put(parentnodeName, parentnodeValue);
} else
{
subchildmap = new HashMap[noderepetationlength];
for (int t = 0; t < noderepetationlength; t )
{
NodeList childNodes1 = item.getChildNodes();
int length1 = childNodes1.getLength();
subchildmap[t] = new HashMap();
for (int j = 0; j < length1; j )
{
Node item2 = childNodes1.item(j);
if (item2.getNodeType() == Node.ELEMENT_NODE)
{
subchildnodeName = item2.getNodeName();
NodeList childNodes2 = item2.getChildNodes();
int length2 = childNodes2.getLength();
for (int k = 0; k < length2; k )
subchildnodeValue = childNodes2.item(k).getNodeValue();
}
subchildmap[t].put(subchildnodeName, subchildnodeValue);
}
map[i].put(parentnodeName, subchildmap[t]);
}
}
}//else
} //end of for-loop
} catch (ParserConfigurationException pce) {
} catch (NullPointerException nofe) {
} catch (SAXException saxException) {
} catch (IOException ioe) {
}
return map;
}
но не в состоянии получить ожидаемые результаты.
Спасибо
Комментарии:
1. XPath: ibm.com/developerworks/library/x-javaxpathapi/index.html
2. В чем ваш вопрос? Что вы пробовали? Где вы застряли? У вас сломана клавиша Shift?
3. «не удается получить ожидаемые результаты». Какого результата вы ожидали? Какой результат вы получили? Скопируйте / вставьте результат. Кстати — для лучшей справки отправьте SSCCE . Для SSCCE, включающего преобразование XML, вы можете жестко закодировать XML как
String
в исходном коде.
Ответ №1:
Jaxb хорошо служил мне в прошлом, но в данной ситуации это может быть излишеством.
Ответ №2:
Ответ №3:
Я считаю, что это отличный учебник :
http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/
Ответ №4:
http://java.sun.com/developer/Books/xmljava/ch03.pdf
http://www.exampledepot.com/taxonomy/term/374
String[] FindNodeValues(String XMLString,String nodeName,String[] vals)
{
DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = fact.newDocumentBuilder();
Document doc = builder.parse(XMLString);//XML String should contain the XML
Node node = doc.getDocumentElement();
NodeList list =doc.getElementsByTagName(nodeName).item(0).getChildNodes();
for(i=0;i<list.length;i ){vals[i]=list.item(0).getNodeValue();}
return vals;
}
Рассматривайте это только как псевдокод. В нем могут быть ошибки;