簡體   English   中英

Java中的XML解析問題

[英]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());
                }
            }
        }
    }
}

我可以得到名字和身份證

<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 hrs”和ABC

這2個標記是可變的,可以從2更改為5或更大。我想在for循環中將其迭代並放入某個bean中。所以要基於for循環中標記的名稱來獲取值

所以。。基本上我想弄清楚在<field name="test123">多少<object pk="1" model="employee">標簽可用,並想使用循環遍歷for循環中的每個<object>標簽字段updated_on and EmployeeName並獲取它們的值並放入java bean中。

如何分別使用屬性“ updated_on和EmployeeName來獲取值“ 2014年11月27日17:18 hrs”和ABC

獲取field[@type = 'DateTimeField']的正確路徑表達式是

/object/field/object/field[@name = 'updated_on']

並獲取field[@type = 'CharField']

/object/field/object/field[@name = 'EmployeeName']

您沒有說為什么無法檢索這些節點,但是我懷疑以下情況:很可能您嘗試使用類似以下的表達式來查找它們

/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']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM