Xml java 中的解析问题
Xml parsing issue in java
这是我要解析的 xml..
<object pk="1" model="test">
<field type="BigIntegerField" name="number">100809206</field>
<field type="CharField" name="id">11700632</field>
<field name="test123">
<object pk="1" model="employee">
<field type="DateTimeField" name="updated_on">27 Nov, 2014, 17:18 hrs</field>
<field type="CharField" name="EmployeeName">ABC</field>
</object>
<object pk="2" model="employee">
<field type="DateTimeField" name="updated_on">28 Nov, 2014, 17:18 hrs</field>
<field type="CharField" name="EmployeeName">XYZ</field>
</object>
<object pk="3" model="employee">
<field type="DateTimeField" name="updated_on">28 Nov, 2014, 17:18 hrs</field>
<field type="CharField" name="EmployeeName">XYZ</field>
</object>
</field>
</object>
我的代码
BufferedReader in = new BufferedReader(new InputStreamReader(httpsURLConnection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null)
{
response.append(inputLine);
}
in.close();
if(response != null && !"".contains(response))
{
SAXBuilder saxBuilder = new SAXBuilder();
Document doc = saxBuilder.build(new StringReader(response.toString()));
Element rootEle = doc.getRootElement();
List childList = rootEle.getChildren();
System.out.println(childList.toString());
for(i=0;i<childList.size();i++)
{
Element shipment= (Element) childList.get(i);
if(shipment != null)
{
List dataList = shipment.getChildren();
if(dataList != null && dataList.size() > 0)
{
List dataList = shipment.getChildren();
if(dataList != null && dataList.size() > 0)
{
XMLOutputter xmlOutput = new XMLOutputter();
String shipmentXml = xmlOutput.outputString(shipment);
InputSource source = new InputSource(new StringReader(shipmentXml));
org.w3c.dom.Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(source);
XPath xpath = XPathFactory.newInstance().newXPath();
String number = (xpath.evaluate("/object/field[@name ='number']", document).trim());
String name = (xpath.evaluate("/object/field[@name ='id']", document).trim());
}
}
}
}
}
我可以获取姓名和 ID
<field type="BigIntegerField" name="number">100809206</field>
<field type="CharField" name="id">11700632</field>
但无法使用 usimg xpath 获取以下字段..
<field name="test123">
<object pk="1" model="employee">
<field type="DateTimeField" name="updated_on">27 Nov, 2014, 17:18 hrs</field>
<field type="CharField" name="EmployeeName">ABC</field>
</object>
<object pk="2" model="employee">
<field type="DateTimeField" name="updated_on">28 Nov, 2014, 17:18 hrs</field>
<field type="CharField" name="EmployeeName">XYZ</field>
</object>
</field>
如何分别使用属性“updated_on 和 EmployeeName
获取值“2014 年 11 月 27 日,17:18 小时”和 ABC
这 2 个标签各不相同,可以从 2 个变为 5 个或更多。我想在 for 循环中迭代它
并将它放在一些 bean 中..所以想要基于 for 循环中标签名称的值
所以..基本上我想弄清楚 <field name="test123">
中有多少 <object pk="1" model="employee">
标签可用,并想使用字段 [=19] 遍历 for 循环中的每个 <object>
标签=] 并获取它们的值并放入 java bean。
how to get value "27 Nov, 2014, 17:18 hrs" and ABC using attribute "updated_on and EmployeeName respectively
获得field[@type = 'DateTimeField']
的正确路径表达式是
/object/field/object/field[@name = 'updated_on']
并得到 field[@type = 'CharField']
/object/field/object/field[@name = 'EmployeeName']
你没有说为什么你无法检索这些节点,但我怀疑如下:很可能,你试图用像[=这样的表达式来找到它们20=]
/object/field[@name ='updated_on']
只有 XML 的结构如下:
<object>
<field name="updated_on"/>
</object>
其实结构是
<object>
<field>
<object>
<field name="updated_on"/>
</object>
</field>
</object>
查找树中任意位置的元素只能用 //
:
//object/field[@name ='updated_on']
这是我要解析的 xml..
<object pk="1" model="test">
<field type="BigIntegerField" name="number">100809206</field>
<field type="CharField" name="id">11700632</field>
<field name="test123">
<object pk="1" model="employee">
<field type="DateTimeField" name="updated_on">27 Nov, 2014, 17:18 hrs</field>
<field type="CharField" name="EmployeeName">ABC</field>
</object>
<object pk="2" model="employee">
<field type="DateTimeField" name="updated_on">28 Nov, 2014, 17:18 hrs</field>
<field type="CharField" name="EmployeeName">XYZ</field>
</object>
<object pk="3" model="employee">
<field type="DateTimeField" name="updated_on">28 Nov, 2014, 17:18 hrs</field>
<field type="CharField" name="EmployeeName">XYZ</field>
</object>
</field>
</object>
我的代码
BufferedReader in = new BufferedReader(new InputStreamReader(httpsURLConnection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null)
{
response.append(inputLine);
}
in.close();
if(response != null && !"".contains(response))
{
SAXBuilder saxBuilder = new SAXBuilder();
Document doc = saxBuilder.build(new StringReader(response.toString()));
Element rootEle = doc.getRootElement();
List childList = rootEle.getChildren();
System.out.println(childList.toString());
for(i=0;i<childList.size();i++)
{
Element shipment= (Element) childList.get(i);
if(shipment != null)
{
List dataList = shipment.getChildren();
if(dataList != null && dataList.size() > 0)
{
List dataList = shipment.getChildren();
if(dataList != null && dataList.size() > 0)
{
XMLOutputter xmlOutput = new XMLOutputter();
String shipmentXml = xmlOutput.outputString(shipment);
InputSource source = new InputSource(new StringReader(shipmentXml));
org.w3c.dom.Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(source);
XPath xpath = XPathFactory.newInstance().newXPath();
String number = (xpath.evaluate("/object/field[@name ='number']", document).trim());
String name = (xpath.evaluate("/object/field[@name ='id']", document).trim());
}
}
}
}
}
我可以获取姓名和 ID
<field type="BigIntegerField" name="number">100809206</field>
<field type="CharField" name="id">11700632</field>
但无法使用 usimg xpath 获取以下字段..
<field name="test123">
<object pk="1" model="employee">
<field type="DateTimeField" name="updated_on">27 Nov, 2014, 17:18 hrs</field>
<field type="CharField" name="EmployeeName">ABC</field>
</object>
<object pk="2" model="employee">
<field type="DateTimeField" name="updated_on">28 Nov, 2014, 17:18 hrs</field>
<field type="CharField" name="EmployeeName">XYZ</field>
</object>
</field>
如何分别使用属性“updated_on 和 EmployeeName
获取值“2014 年 11 月 27 日,17:18 小时”和 ABC这 2 个标签各不相同,可以从 2 个变为 5 个或更多。我想在 for 循环中迭代它 并将它放在一些 bean 中..所以想要基于 for 循环中标签名称的值
所以..基本上我想弄清楚 <field name="test123">
中有多少 <object pk="1" model="employee">
标签可用,并想使用字段 [=19] 遍历 for 循环中的每个 <object>
标签=] 并获取它们的值并放入 java bean。
how to get value "27 Nov, 2014, 17:18 hrs" and ABC using attribute "updated_on and EmployeeName respectively
获得field[@type = 'DateTimeField']
的正确路径表达式是
/object/field/object/field[@name = 'updated_on']
并得到 field[@type = 'CharField']
/object/field/object/field[@name = 'EmployeeName']
你没有说为什么你无法检索这些节点,但我怀疑如下:很可能,你试图用像[=这样的表达式来找到它们20=]
/object/field[@name ='updated_on']
只有 XML 的结构如下:
<object>
<field name="updated_on"/>
</object>
其实结构是
<object>
<field>
<object>
<field name="updated_on"/>
</object>
</field>
</object>
查找树中任意位置的元素只能用 //
:
//object/field[@name ='updated_on']